Results Study 2: Self-Improvement and Self-Acceptance as Mechanisms of Positive Personality Change

Author

[blinded]

1 Load packages

Show the code
library(renv)
library(tidyverse)
library(broom)
library(labelled)
library(psych)
library(GPArotation)
#library(devtools)
#install_github("cran/multicon") # not on CRAN atm
library(multicon)
library(correlation)
library(careless)
library(corrplot)
library(lavaan)
library(semTools)
library(semPlot)
library(knitr)
library(ggdist)
library(ggforce)
library(cowplot)
library(nortest)
library(lmerTest)
library(effectsize)
library(wordcloud) # these 3 for the word clouds
library(RColorBrewer)
library(tm)

2 Data cleaning

Show the code
source("clean_data_st2.R")

3 Create item parcels

3.1 Well-being measures

Reshape data

Show the code
df_sbsa2_wide_wb <- df_sbsa2 %>% 
  arrange(pid, time) %>% 
  select(pid, time, rando, starts_with(c("sw06", "ml01", "rs01", "sc01"))) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = starts_with(c("sw06", "ml01", "rs01", "sc01")))
# colnames(df_sbsa2_wide_wb)

3.1.1 Meaning in life

Check CFA item loadings at T1

cfa_meaning <- '
# Define the latent factors
meaning1 =~ NA*ml01_01_t1 + lambda1*ml01_01_t1 + lambda2*ml01_02_t1 + lambda3*ml01_03_t1 + lambda4*ml01_04_t1 + lambda5*ml01_05_t1 + lambda6*ml01_06_t1 + lambda7*ml01_07_t1 + lambda8*ml01_08_t1 + lambda9*ml01_09_t1 + lambda10*ml01_10_t1

# Intercepts
ml01_01_t1 ~ i1*1
ml01_02_t1 ~ 1
ml01_03_t1 ~ 1
ml01_04_t1 ~ 1
ml01_05_t1 ~ 1
ml01_06_t1 ~ 1
ml01_07_t1 ~ 1
ml01_08_t1 ~ 1
ml01_09_t1 ~ 1
ml01_10_t1 ~ 1

# Unique Variances
ml01_01_t1 ~~ ml01_01_t1
ml01_02_t1 ~~ ml01_02_t1
ml01_03_t1 ~~ ml01_03_t1
ml01_04_t1 ~~ ml01_04_t1
ml01_05_t1 ~~ ml01_05_t1
ml01_06_t1 ~~ ml01_06_t1
ml01_07_t1 ~~ ml01_07_t1
ml01_08_t1 ~~ ml01_08_t1
ml01_09_t1 ~~ ml01_09_t1
ml01_10_t1 ~~ ml01_10_t1

# Latent Variable Means
meaning1 ~ 0*1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
'
fit_cfa_meaning <- cfa(cfa_meaning, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_cfa_meaning, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 23 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        30

                                                  Used       Total
  Number of observations                           847         849
  Number of missing patterns                         1            

Model Test User Model:
                                                      
  Test statistic                              2451.486
  Degrees of freedom                                35
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              5903.003
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.587
  Tucker-Lewis Index (TLI)                       0.470
                                                      
  Robust Comparative Fit Index (CFI)             0.587
  Robust Tucker-Lewis Index (TLI)                0.470

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14719.920
  Loglikelihood unrestricted model (H1)     -13494.177
                                                      
  Akaike (AIC)                               29499.840
  Bayesian (BIC)                             29642.091
  Sample-size adjusted Bayesian (SABIC)      29546.820

Root Mean Square Error of Approximation:

  RMSEA                                          0.286
  90 Percent confidence interval - lower         0.276
  90 Percent confidence interval - upper         0.295
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.286
  90 Percent confidence interval - lower         0.276
  90 Percent confidence interval - upper         0.295
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.222

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  meaning1 =~                                         
    m01_01_ (lmb1)    1.478    0.050   29.760    0.000
    m01_02_ (lmb2)   -0.453    0.053   -8.581    0.000
    m01_03_ (lmb3)   -0.312    0.055   -5.697    0.000
    m01_04_ (lmb4)    1.586    0.048   33.354    0.000
    m01_05_ (lmb5)    1.442    0.049   29.455    0.000
    m01_06_ (lmb6)    1.527    0.050   30.720    0.000
    m01_07_ (lmb7)   -0.284    0.055   -5.202    0.000
    m01_08_ (lmb8)   -0.444    0.057   -7.749    0.000
    m01_09_ (lmb9)   -1.460    0.059  -24.872    0.000
    m01_10_ (lm10)   -0.835    0.058  -14.334    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .ml01_01_1 (i1)    4.156    0.060   68.803    0.000
   .ml01_02_1         5.347    0.052  103.093    0.000
   .ml01_03_1         5.123    0.053   96.752    0.000
   .ml01_04_1         3.973    0.060   65.761    0.000
   .ml01_05_1         4.483    0.059   75.615    0.000
   .ml01_06_1         3.970    0.061   64.910    0.000
   .ml01_07_1         5.086    0.053   96.700    0.000
   .ml01_08_1         5.026    0.056   90.118    0.000
   .ml01_09_1         3.880    0.067   57.625    0.000
   .ml01_10_1         4.885    0.060   82.075    0.000
    meaning1          0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .ml01_01_t1        0.905    0.054   16.872    0.000
   .ml01_02_t1        2.073    0.102   20.396    0.000
   .ml01_03_t1        2.277    0.111   20.495    0.000
   .ml01_04_t1        0.576    0.042   13.801    0.000
   .ml01_05_t1        0.898    0.053   16.956    0.000
   .ml01_06_t1        0.836    0.052   16.215    0.000
   .ml01_07_t1        2.263    0.110   20.510    0.000
   .ml01_08_t1        2.438    0.119   20.416    0.000
   .ml01_09_t1        1.706    0.091   18.665    0.000
   .ml01_10_t1        2.304    0.115   20.001    0.000
    meaning1          1.000                           
tidy(fit_cfa_meaning) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 10 × 6
   term                   op    label    estimate std.error std.all
   <chr>                  <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 meaning1 =~ ml01_04_t1 =~    lambda4     1.59     0.0475   0.902
 2 meaning1 =~ ml01_06_t1 =~    lambda6     1.53     0.0497   0.858
 3 meaning1 =~ ml01_01_t1 =~    lambda1     1.48     0.0497   0.841
 4 meaning1 =~ ml01_09_t1 =~    lambda9    -1.46     0.0587  -0.745
 5 meaning1 =~ ml01_05_t1 =~    lambda5     1.44     0.0489   0.836
 6 meaning1 =~ ml01_10_t1 =~    lambda10   -0.835    0.0583  -0.482
 7 meaning1 =~ ml01_02_t1 =~    lambda2    -0.453    0.0528  -0.300
 8 meaning1 =~ ml01_08_t1 =~    lambda8    -0.444    0.0573  -0.273
 9 meaning1 =~ ml01_03_t1 =~    lambda3    -0.312    0.0548  -0.203
10 meaning1 =~ ml01_07_t1 =~    lambda7    -0.284    0.0545  -0.185

Reverse-code and form parcels:

df_sbsa2_wide_wb <- df_sbsa2_wide_wb %>% 
  mutate(ml01_09_t1_r = ml01_09_t1,
         ml01_10_t1_r = ml01_10_t1,
         ml01_02_t1_r = ml01_02_t1,
         ml01_08_t1_r = ml01_08_t1,
         ml01_07_t1_r = ml01_07_t1,
         ml01_03_t1_r = ml01_03_t1,
         ml01_09_t2_r = ml01_09_t2,
         ml01_10_t2_r = ml01_10_t2,
         ml01_02_t2_r = ml01_02_t2,
         ml01_08_t2_r = ml01_08_t2,
         ml01_07_t2_r = ml01_07_t2,
         ml01_03_t2_r = ml01_03_t2,
         ml01_09_t3_r = ml01_09_t3,
         ml01_10_t3_r = ml01_10_t3,
         ml01_02_t3_r = ml01_02_t3,
         ml01_08_t3_r = ml01_08_t3,
         ml01_07_t3_r = ml01_07_t3,
         ml01_03_t3_r = ml01_03_t3) %>% 
  mutate(across(intersect(starts_with("ml01"), ends_with("_r")), 
                ~ recode(.x, `1` = 7L, `2` = 6L, `3` = 5L, `4` = 4L, `5` = 3L, `6` = 2L, `7` = 1L, .default = NA_integer_))) %>% 
  mutate(meaning_par1_t1 = rowMeans(across(c(ml01_04_t1, ml01_10_t1_r, ml01_03_t1_r, ml01_07_t1_r)), na.rm=T),
         meaning_par2_t1 = rowMeans(across(c(ml01_06_t1, ml01_05_t1, ml01_08_t1_r)), na.rm=T),
         meaning_par3_t1 = rowMeans(across(c(ml01_01_t1, ml01_09_t1_r, ml01_02_t1_r)), na.rm=T),
         meaning_par1_t2 = rowMeans(across(c(ml01_04_t2, ml01_10_t2_r, ml01_03_t2_r, ml01_07_t2_r)), na.rm=T),
         meaning_par2_t2 = rowMeans(across(c(ml01_06_t2, ml01_05_t2, ml01_08_t2_r)), na.rm=T),
         meaning_par3_t2 = rowMeans(across(c(ml01_01_t2, ml01_09_t2_r, ml01_02_t2_r)), na.rm=T),
         meaning_par1_t3 = rowMeans(across(c(ml01_04_t3, ml01_10_t3_r, ml01_03_t3_r, ml01_07_t3_r)), na.rm=T),
         meaning_par2_t3 = rowMeans(across(c(ml01_06_t3, ml01_05_t3, ml01_08_t3_r)), na.rm=T),
         meaning_par3_t3 = rowMeans(across(c(ml01_01_t3, ml01_09_t3_r, ml01_02_t3_r)), na.rm=T))

3.1.2 Self-esteem

Check CFA item loadings at T1

cfa_selfes <- '
# Define the latent factors
selfes1 =~ NA*rs01_01_t1 + lambda1*rs01_01_t1 + lambda2*rs01_02_t1 + lambda3*rs01_03_t1 + lambda4*rs01_04_t1 + lambda5*rs01_05_t1 + lambda6*rs01_06_t1 + lambda7*rs01_07_t1 + lambda8*rs01_08_t1 + lambda9*rs01_09_t1 + lambda10*rs01_10_t1

# Intercepts
rs01_01_t1 ~ i1*1
rs01_02_t1 ~ 1
rs01_03_t1 ~ 1
rs01_04_t1 ~ 1
rs01_05_t1 ~ 1
rs01_06_t1 ~ 1
rs01_07_t1 ~ 1
rs01_08_t1 ~ 1
rs01_09_t1 ~ 1
rs01_10_t1 ~ 1

# Unique Variances
rs01_01_t1 ~~ rs01_01_t1
rs01_02_t1 ~~ rs01_02_t1
rs01_03_t1 ~~ rs01_03_t1
rs01_04_t1 ~~ rs01_04_t1
rs01_05_t1 ~~ rs01_05_t1
rs01_06_t1 ~~ rs01_06_t1
rs01_07_t1 ~~ rs01_07_t1
rs01_08_t1 ~~ rs01_08_t1
rs01_09_t1 ~~ rs01_09_t1
rs01_10_t1 ~~ rs01_10_t1

# Latent Variable Means
selfes1 ~ 0*1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
'
fit_cfa_selfes <- cfa(cfa_selfes, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_cfa_selfes, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 15 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        30

                                                  Used       Total
  Number of observations                           847         849
  Number of missing patterns                         1            

Model Test User Model:
                                                      
  Test statistic                               493.618
  Degrees of freedom                                35
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              4386.991
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.894
  Tucker-Lewis Index (TLI)                       0.864
                                                      
  Robust Comparative Fit Index (CFI)             0.894
  Robust Tucker-Lewis Index (TLI)                0.864

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -11502.923
  Loglikelihood unrestricted model (H1)     -11256.114
                                                      
  Akaike (AIC)                               23065.846
  Bayesian (BIC)                             23208.097
  Sample-size adjusted Bayesian (SABIC)      23112.827

Root Mean Square Error of Approximation:

  RMSEA                                          0.124
  90 Percent confidence interval - lower         0.115
  90 Percent confidence interval - upper         0.134
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.124
  90 Percent confidence interval - lower         0.115
  90 Percent confidence interval - upper         0.134
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.062

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  selfes1 =~                                          
    r01_01_ (lmb1)    0.867    0.036   23.906    0.000
    r01_02_ (lmb2)   -0.997    0.042  -23.899    0.000
    r01_03_ (lmb3)    0.501    0.028   17.737    0.000
    r01_04_ (lmb4)    0.571    0.033   17.507    0.000
    r01_05_ (lmb5)   -0.932    0.039  -23.875    0.000
    r01_06_ (lmb6)   -1.063    0.041  -26.027    0.000
    r01_07_ (lmb7)    0.702    0.033   20.966    0.000
    r01_08_ (lmb8)   -0.619    0.041  -14.943    0.000
    r01_09_ (lmb9)   -1.150    0.039  -29.187    0.000
    r01_10_ (lm10)    0.979    0.035   27.592    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .rs01_01_1 (i1)    3.034    0.041   74.189    0.000
   .rs01_02_1         3.174    0.047   67.592    0.000
   .rs01_03_1         3.947    0.030  132.913    0.000
   .rs01_04_1         3.824    0.034  111.837    0.000
   .rs01_05_1         2.789    0.044   63.327    0.000
   .rs01_06_1         3.223    0.047   68.318    0.000
   .rs01_07_1         3.648    0.036  100.087    0.000
   .rs01_08_1         3.816    0.042   89.803    0.000
   .rs01_09_1         2.653    0.047   56.001    0.000
   .rs01_10_1         3.218    0.042   76.962    0.000
    selfes1           0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .rs01_01_t1        0.665    0.036   18.392    0.000
   .rs01_02_t1        0.873    0.048   18.258    0.000
   .rs01_03_t1        0.496    0.025   19.518    0.000
   .rs01_04_t1        0.665    0.034   19.560    0.000
   .rs01_05_t1        0.774    0.042   18.468    0.000
   .rs01_06_t1        0.755    0.043   17.571    0.000
   .rs01_07_t1        0.632    0.033   18.965    0.000
   .rs01_08_t1        1.146    0.058   19.925    0.000
   .rs01_09_t1        0.577    0.036   16.228    0.000
   .rs01_10_t1        0.523    0.031   17.066    0.000
    selfes1           1.000                           
tidy(fit_cfa_selfes) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 10 × 6
   term                  op    label    estimate std.error std.all
   <chr>                 <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 selfes1 =~ rs01_09_t1 =~    lambda9    -1.15     0.0394  -0.834
 2 selfes1 =~ rs01_06_t1 =~    lambda6    -1.06     0.0409  -0.774
 3 selfes1 =~ rs01_02_t1 =~    lambda2    -0.997    0.0417  -0.730
 4 selfes1 =~ rs01_10_t1 =~    lambda10    0.979    0.0355   0.804
 5 selfes1 =~ rs01_05_t1 =~    lambda5    -0.932    0.0390  -0.727
 6 selfes1 =~ rs01_01_t1 =~    lambda1     0.867    0.0363   0.729
 7 selfes1 =~ rs01_07_t1 =~    lambda7     0.702    0.0335   0.662
 8 selfes1 =~ rs01_08_t1 =~    lambda8    -0.619    0.0414  -0.500
 9 selfes1 =~ rs01_04_t1 =~    lambda4     0.571    0.0326   0.573
10 selfes1 =~ rs01_03_t1 =~    lambda3     0.501    0.0283   0.580

Reverse-code and form parcels:

df_sbsa2_wide_wb <- df_sbsa2_wide_wb %>% 
  mutate(rs01_09_t1_r = rs01_09_t1,
         rs01_06_t1_r = rs01_06_t1,
         rs01_02_t1_r = rs01_02_t1,
         rs01_05_t1_r = rs01_05_t1,
         rs01_08_t1_r = rs01_08_t1,
         rs01_09_t2_r = rs01_09_t2,
         rs01_06_t2_r = rs01_06_t2,
         rs01_02_t2_r = rs01_02_t2,
         rs01_05_t2_r = rs01_05_t2,
         rs01_08_t2_r = rs01_08_t2,
         rs01_09_t3_r = rs01_09_t3,
         rs01_06_t3_r = rs01_06_t3,
         rs01_02_t3_r = rs01_02_t3,
         rs01_05_t3_r = rs01_05_t3,
         rs01_08_t3_r = rs01_08_t3) %>% 
  mutate(across(intersect(starts_with("rs01"), ends_with("_r")), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(selfes_par1_t1 = rowMeans(across(c(rs01_09_t1_r, rs01_01_t1, rs01_04_t1, rs01_03_t1)), na.rm=T),
         selfes_par2_t1 = rowMeans(across(c(rs01_06_t1_r, rs01_05_t1_r, rs01_08_t1_r)), na.rm=T),
         selfes_par3_t1 = rowMeans(across(c(rs01_02_t1_r, rs01_10_t1, rs01_07_t1)), na.rm=T),
         selfes_par1_t2 = rowMeans(across(c(rs01_09_t2_r, rs01_01_t2, rs01_04_t2, rs01_03_t2)), na.rm=T),
         selfes_par2_t2 = rowMeans(across(c(rs01_06_t2_r, rs01_05_t2_r, rs01_08_t2_r)), na.rm=T),
         selfes_par3_t2 = rowMeans(across(c(rs01_02_t2_r, rs01_10_t2, rs01_07_t2)), na.rm=T),
         selfes_par1_t3 = rowMeans(across(c(rs01_09_t3_r, rs01_01_t3, rs01_04_t3, rs01_03_t3)), na.rm=T),
         selfes_par2_t3 = rowMeans(across(c(rs01_06_t3_r, rs01_05_t3_r, rs01_08_t3_r)), na.rm=T),
         selfes_par3_t3 = rowMeans(across(c(rs01_02_t3_r, rs01_10_t3, rs01_07_t3)), na.rm=T))

3.1.3 Self-concept clarity

Check CFA item loadings at T1

cfa_concept <- '
# Define the latent factors
concept1 =~ NA*sc01_01_t1 + lambda1*sc01_01_t1 + lambda2*sc01_02_t1 + lambda3*sc01_03_t1 + lambda4*sc01_04_t1 + lambda5*sc01_05_t1 + lambda6*sc01_06_t1 + lambda7*sc01_07_t1 + lambda8*sc01_08_t1 + lambda9*sc01_09_t1 + lambda10*sc01_10_t1 + lambda11*sc01_11_t1 + lambda12*sc01_12_t1

# Intercepts
sc01_01_t1 ~ i1*1
sc01_02_t1 ~ 1
sc01_03_t1 ~ 1
sc01_04_t1 ~ 1
sc01_05_t1 ~ 1
sc01_06_t1 ~ 1
sc01_07_t1 ~ 1
sc01_08_t1 ~ 1
sc01_09_t1 ~ 1
sc01_10_t1 ~ 1
sc01_11_t1 ~ 1
sc01_12_t1 ~ 1

# Unique Variances
sc01_01_t1 ~~ sc01_01_t1
sc01_02_t1 ~~ sc01_02_t1
sc01_03_t1 ~~ sc01_03_t1
sc01_04_t1 ~~ sc01_04_t1
sc01_05_t1 ~~ sc01_05_t1
sc01_06_t1 ~~ sc01_06_t1
sc01_07_t1 ~~ sc01_07_t1
sc01_08_t1 ~~ sc01_08_t1
sc01_09_t1 ~~ sc01_09_t1
sc01_10_t1 ~~ sc01_10_t1
sc01_11_t1 ~~ sc01_11_t1
sc01_12_t1 ~~ sc01_12_t1

# Latent Variable Means
concept1 ~ 0*1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
'
fit_cfa_concept <- cfa(cfa_concept, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_cfa_concept, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 32 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           847         849
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                               430.284
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              4809.241
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.921
  Tucker-Lewis Index (TLI)                       0.903
                                                      
  Robust Comparative Fit Index (CFI)             0.921
  Robust Tucker-Lewis Index (TLI)                0.903

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -15026.110
  Loglikelihood unrestricted model (H1)     -14810.968
                                                      
  Akaike (AIC)                               30124.220
  Bayesian (BIC)                             30294.921
  Sample-size adjusted Bayesian (SABIC)      30180.596

Root Mean Square Error of Approximation:

  RMSEA                                          0.091
  90 Percent confidence interval - lower         0.083
  90 Percent confidence interval - upper         0.099
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.987
                                                      
  Robust RMSEA                                   0.091
  90 Percent confidence interval - lower         0.083
  90 Percent confidence interval - upper         0.099
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.987

Standardized Root Mean Square Residual:

  SRMR                                           0.040

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  concept1 =~                                         
    s01_01_ (lmb1)    0.939    0.040   23.441    0.000
    s01_02_ (lmb2)    1.028    0.042   24.709    0.000
    s01_03_ (lmb3)    0.965    0.041   23.263    0.000
    s01_04_ (lmb4)    1.030    0.041   25.217    0.000
    s01_05_ (lmb5)    0.820    0.043   18.976    0.000
    s01_06_ (lmb6)    0.038    0.044    0.874    0.382
    s01_07_ (lmb7)    0.801    0.044   18.176    0.000
    s01_08_ (lmb8)    1.053    0.038   28.033    0.000
    s01_09_ (lmb9)    1.034    0.039   26.382    0.000
    s01_10_ (lm10)    0.934    0.040   23.116    0.000
    s01_11_ (lm11)   -0.760    0.039  -19.544    0.000
    s01_12_ (lm12)    0.841    0.043   19.695    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .sc01_01_1 (i1)    3.157    0.045   70.268    0.000
   .sc01_02_1         3.378    0.047   71.322    0.000
   .sc01_03_1         3.232    0.046   69.556    0.000
   .sc01_04_1         3.139    0.047   67.116    0.000
   .sc01_05_1         2.974    0.046   64.411    0.000
   .sc01_06_1         2.889    0.042   69.113    0.000
   .sc01_07_1         2.700    0.047   57.795    0.000
   .sc01_08_1         2.753    0.045   61.854    0.000
   .sc01_09_1         2.856    0.046   62.701    0.000
   .sc01_10_1         2.926    0.045   64.757    0.000
   .sc01_11_1         3.243    0.042   77.576    0.000
   .sc01_12_1         3.115    0.046   67.710    0.000
    concept1          0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .sc01_01_t1        0.829    0.045   18.572    0.000
   .sc01_02_t1        0.843    0.046   18.184    0.000
   .sc01_03_t1        0.896    0.048   18.622    0.000
   .sc01_04_t1        0.793    0.044   18.037    0.000
   .sc01_05_t1        1.134    0.058   19.475    0.000
   .sc01_06_t1        1.479    0.072   20.577    0.000
   .sc01_07_t1        1.208    0.062   19.612    0.000
   .sc01_08_t1        0.570    0.034   16.947    0.000
   .sc01_09_t1        0.688    0.039   17.655    0.000
   .sc01_10_t1        0.856    0.046   18.662    0.000
   .sc01_11_t1        0.903    0.047   19.403    0.000
   .sc01_12_t1        1.085    0.056   19.402    0.000
    concept1          1.000                           
tidy(fit_cfa_concept) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                   op    label    estimate std.error std.all
   <chr>                  <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 concept1 =~ sc01_08_t1 =~    lambda8    1.05      0.0375  0.812 
 2 concept1 =~ sc01_09_t1 =~    lambda9    1.03      0.0392  0.780 
 3 concept1 =~ sc01_04_t1 =~    lambda4    1.03      0.0408  0.756 
 4 concept1 =~ sc01_02_t1 =~    lambda2    1.03      0.0416  0.746 
 5 concept1 =~ sc01_03_t1 =~    lambda3    0.965     0.0415  0.714 
 6 concept1 =~ sc01_01_t1 =~    lambda1    0.939     0.0400  0.718 
 7 concept1 =~ sc01_10_t1 =~    lambda10   0.934     0.0404  0.710 
 8 concept1 =~ sc01_12_t1 =~    lambda12   0.841     0.0427  0.628 
 9 concept1 =~ sc01_05_t1 =~    lambda5    0.820     0.0432  0.610 
10 concept1 =~ sc01_07_t1 =~    lambda7    0.801     0.0440  0.589 
11 concept1 =~ sc01_11_t1 =~    lambda11  -0.760     0.0389 -0.624 
12 concept1 =~ sc01_06_t1 =~    lambda6    0.0381    0.0436  0.0313

Reverse-code and form parcels:

df_sbsa2_wide_wb <- df_sbsa2_wide_wb %>% # based on the item content, it makes more sense here to recode all except sc01_11
  mutate(sc01_01_t1_r = sc01_01_t1,
         sc01_02_t1_r = sc01_02_t1,
         sc01_03_t1_r = sc01_03_t1,
         sc01_04_t1_r = sc01_04_t1,
         sc01_05_t1_r = sc01_05_t1,
         sc01_06_t1_r = sc01_06_t1,
         sc01_07_t1_r = sc01_07_t1,
         sc01_08_t1_r = sc01_08_t1,
         sc01_09_t1_r = sc01_09_t1,
         sc01_10_t1_r = sc01_10_t1,
         sc01_12_t1_r = sc01_12_t1,
         sc01_01_t2_r = sc01_01_t2,
         sc01_02_t2_r = sc01_02_t2,
         sc01_03_t2_r = sc01_03_t2,
         sc01_04_t2_r = sc01_04_t2,
         sc01_05_t2_r = sc01_05_t2,
         sc01_06_t2_r = sc01_06_t2,
         sc01_07_t2_r = sc01_07_t2,
         sc01_08_t2_r = sc01_08_t2,
         sc01_09_t2_r = sc01_09_t2,
         sc01_10_t2_r = sc01_10_t2,
         sc01_12_t2_r = sc01_12_t2,
         sc01_01_t3_r = sc01_01_t3,
         sc01_02_t3_r = sc01_02_t3,
         sc01_03_t3_r = sc01_03_t3,
         sc01_04_t3_r = sc01_04_t3,
         sc01_05_t3_r = sc01_05_t3,
         sc01_06_t3_r = sc01_06_t3,
         sc01_07_t3_r = sc01_07_t3,
         sc01_08_t3_r = sc01_08_t3,
         sc01_09_t3_r = sc01_09_t3,
         sc01_10_t3_r = sc01_10_t3,
         sc01_12_t3_r = sc01_12_t3) %>% 
  mutate(across(intersect(starts_with("sc01"), ends_with("_r")), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(concept_par1_t1 = rowMeans(across(c(sc01_08_t1_r, sc01_01_t1_r, sc01_05_t1_r, sc01_06_t1_r)), na.rm=T),
         concept_par2_t1 = rowMeans(across(c(sc01_09_t1_r, sc01_03_t1_r, sc01_12_t1_r, sc01_11_t1)), na.rm=T),
         concept_par3_t1 = rowMeans(across(c(sc01_04_t1_r, sc01_02_t1_r, sc01_10_t1_r, sc01_07_t1_r)), na.rm=T),
         concept_par1_t2 = rowMeans(across(c(sc01_08_t2_r, sc01_01_t2_r, sc01_05_t2_r, sc01_06_t2_r)), na.rm=T),
         concept_par2_t2 = rowMeans(across(c(sc01_09_t2_r, sc01_03_t2_r, sc01_12_t2_r, sc01_11_t2)), na.rm=T),
         concept_par3_t2 = rowMeans(across(c(sc01_04_t2_r, sc01_02_t2_r, sc01_10_t2_r, sc01_07_t2_r)), na.rm=T),
         concept_par1_t3 = rowMeans(across(c(sc01_08_t3_r, sc01_01_t3_r, sc01_05_t3_r, sc01_06_t3_r)), na.rm=T),
         concept_par2_t3 = rowMeans(across(c(sc01_09_t3_r, sc01_03_t3_r, sc01_12_t3_r, sc01_11_t3)), na.rm=T),
         concept_par3_t3 = rowMeans(across(c(sc01_04_t3_r, sc01_02_t3_r, sc01_10_t3_r, sc01_07_t3_r)), na.rm=T))

# replace NaN with regular NA
df_sbsa2_wide_wb <- df_sbsa2_wide_wb %>% 
  mutate_all(~ifelse(is.nan(.), NA, .))

3.2 Big Five

Show the code
# all time points
df_sbsa2_wide_pers <- df_sbsa2 %>% 
  arrange(pid, time) %>% 
  select(pid, rando, time, starts_with(c("bf05", "bf06"))) %>% 
  mutate(valid=1) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(valid, starts_with(c("bf05", "bf06"))))
# colnames(df_sbsa2_wide_pers)

3.2.1 Extraversion - current self

Check CFA item loadings at T1

cfa_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*bf05_01_t1 + lambda1*bf05_01_t1 + lambda2*bf05_06_t1 + lambda3*bf05_11_t1 + lambda4*bf05_16_t1 + lambda5*bf05_21_t1 + lambda6*bf05_26_t1 + lambda7*bf05_31_t1 + lambda8*bf05_36_t1 + lambda9*bf05_41_t1 + lambda10*bf05_46_t1 + lambda11*bf05_51_t1 + lambda12*bf05_56_t1

# Intercepts
bf05_01_t1 ~ i1*1
bf05_06_t1 ~ 1
bf05_11_t1 ~ 1
bf05_16_t1 ~ 1
bf05_21_t1 ~ 1
bf05_26_t1 ~ 1
bf05_31_t1 ~ 1
bf05_36_t1 ~ 1
bf05_41_t1 ~ 1
bf05_46_t1 ~ 1
bf05_51_t1 ~ 1
bf05_56_t1 ~ 1

# Unique Variances
bf05_01_t1 ~~ bf05_01_t1
bf05_06_t1 ~~ bf05_06_t1
bf05_11_t1 ~~ bf05_11_t1
bf05_16_t1 ~~ bf05_16_t1
bf05_21_t1 ~~ bf05_21_t1
bf05_26_t1 ~~ bf05_26_t1
bf05_31_t1 ~~ bf05_31_t1
bf05_36_t1 ~~ bf05_36_t1
bf05_41_t1 ~~ bf05_41_t1
bf05_46_t1 ~~ bf05_46_t1
bf05_51_t1 ~~ bf05_51_t1
bf05_56_t1 ~~ bf05_56_t1

# Latent Variable Means
extra_curr1 ~ 0*1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
'
fit_cfa_extra_curr <- cfa(cfa_extra_curr, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_extra_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 34 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               847.969
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              3167.484
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.744
  Tucker-Lewis Index (TLI)                       0.687
                                                      
  Robust Comparative Fit Index (CFI)             0.744
  Robust Tucker-Lewis Index (TLI)                0.687

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -15300.920
  Loglikelihood unrestricted model (H1)     -14876.935
                                                      
  Akaike (AIC)                               30673.840
  Bayesian (BIC)                             30844.584
  Sample-size adjusted Bayesian (SABIC)      30730.259

Root Mean Square Error of Approximation:

  RMSEA                                          0.132
  90 Percent confidence interval - lower         0.124
  90 Percent confidence interval - upper         0.140
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.132
  90 Percent confidence interval - lower         0.124
  90 Percent confidence interval - upper         0.140
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.079

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  extra_curr1 =~                                      
    b05_01_ (lmb1)    0.945    0.042   22.295    0.000
    b05_06_ (lmb2)    0.540    0.042   12.805    0.000
    b05_11_ (lmb3)   -0.322    0.044   -7.334    0.000
    b05_16_ (lmb4)   -0.822    0.041  -19.905    0.000
    b05_21_ (lmb5)    0.770    0.043   18.089    0.000
    b05_26_ (lmb6)   -0.542    0.047  -11.619    0.000
    b05_31_ (lmb7)   -0.776    0.036  -21.343    0.000
    b05_36_ (lmb8)   -0.468    0.041  -11.547    0.000
    b05_41_ (lmb9)    0.676    0.041   16.507    0.000
    b05_46_ (lm10)    0.925    0.043   21.606    0.000
    b05_51_ (lm11)   -0.586    0.043  -13.508    0.000
    b05_56_ (lm12)    0.600    0.039   15.397    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_01_1 (i1)    2.759    0.046   60.440    0.000
   .bf05_06_1         3.073    0.041   75.058    0.000
   .bf05_11_1         2.769    0.041   66.976    0.000
   .bf05_16_1         3.755    0.043   87.599    0.000
   .bf05_21_1         2.721    0.043   62.705    0.000
   .bf05_26_1         3.057    0.045   68.086    0.000
   .bf05_31_1         4.001    0.039  103.823    0.000
   .bf05_36_1         3.158    0.039   80.714    0.000
   .bf05_41_1         2.862    0.041   69.918    0.000
   .bf05_46_1         2.919    0.046   63.955    0.000
   .bf05_51_1         3.188    0.042   75.107    0.000
   .bf05_56_1         3.279    0.039   84.689    0.000
    extr_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_01_t1        0.874    0.052   16.939    0.000
   .bf05_06_t1        1.130    0.058   19.592    0.000
   .bf05_11_t1        1.343    0.066   20.296    0.000
   .bf05_16_t1        0.881    0.050   17.454    0.000
   .bf05_21_t1        1.003    0.055   18.195    0.000
   .bf05_26_t1        1.415    0.072   19.774    0.000
   .bf05_31_t1        0.656    0.038   17.105    0.000
   .bf05_36_t1        1.079    0.054   19.840    0.000
   .bf05_41_t1        0.961    0.052   18.580    0.000
   .bf05_46_t1        0.909    0.053   17.105    0.000
   .bf05_51_t1        1.184    0.061   19.467    0.000
   .bf05_56_t1        0.910    0.048   19.012    0.000
    extra_curr1       1.000                           
tidy(fit_cfa_extra_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 extra_curr1 =~ bf05_01_t1 =~    lambda1     0.945    0.0424   0.711
 2 extra_curr1 =~ bf05_46_t1 =~    lambda10    0.925    0.0428   0.696
 3 extra_curr1 =~ bf05_16_t1 =~    lambda4    -0.822    0.0413  -0.659
 4 extra_curr1 =~ bf05_31_t1 =~    lambda7    -0.776    0.0364  -0.692
 5 extra_curr1 =~ bf05_21_t1 =~    lambda5     0.770    0.0426   0.610
 6 extra_curr1 =~ bf05_41_t1 =~    lambda9     0.676    0.0410   0.568
 7 extra_curr1 =~ bf05_56_t1 =~    lambda12    0.600    0.0389   0.532
 8 extra_curr1 =~ bf05_51_t1 =~    lambda11   -0.586    0.0434  -0.474
 9 extra_curr1 =~ bf05_26_t1 =~    lambda6    -0.542    0.0467  -0.415
10 extra_curr1 =~ bf05_06_t1 =~    lambda2     0.540    0.0421   0.453
11 extra_curr1 =~ bf05_36_t1 =~    lambda8    -0.468    0.0405  -0.411
12 extra_curr1 =~ bf05_11_t1 =~    lambda3    -0.322    0.0438  -0.267

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf05_31_t1_r = bf05_31_t1,
         bf05_16_t1_r = bf05_16_t1,
         bf05_26_t1_r = bf05_26_t1,
         bf05_51_t1_r = bf05_51_t1,
         bf05_36_t1_r = bf05_36_t1,
         bf05_11_t1_r = bf05_11_t1,
         bf05_31_t2_r = bf05_31_t2,
         bf05_16_t2_r = bf05_16_t2,
         bf05_26_t2_r = bf05_26_t2,
         bf05_51_t2_r = bf05_51_t2,
         bf05_36_t2_r = bf05_36_t2,
         bf05_11_t2_r = bf05_11_t2,
         bf05_31_t3_r = bf05_31_t3,
         bf05_16_t3_r = bf05_16_t3,
         bf05_26_t3_r = bf05_26_t3,
         bf05_51_t3_r = bf05_51_t3,
         bf05_36_t3_r = bf05_36_t3,
         bf05_11_t3_r = bf05_11_t3) %>% 
  mutate(across(c(bf05_31_t1_r, bf05_16_t1_r, bf05_26_t1_r, bf05_51_t1_r, bf05_36_t1_r, bf05_11_t1_r, 
                  bf05_31_t2_r, bf05_16_t2_r, bf05_26_t2_r, bf05_51_t2_r, bf05_36_t2_r, bf05_11_t2_r, 
                  bf05_31_t3_r, bf05_16_t3_r, bf05_26_t3_r, bf05_51_t3_r, bf05_36_t3_r, bf05_11_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(extra_curr_par1_t1 = rowMeans(across(c(bf05_01_t1, bf05_41_t1, bf05_26_t1_r, bf05_11_t1_r)), na.rm=T),
         extra_curr_par2_t1 = rowMeans(across(c(bf05_46_t1, bf05_21_t1, bf05_51_t1_r, bf05_36_t1_r)), na.rm=T),
         extra_curr_par3_t1 = rowMeans(across(c(bf05_16_t1_r, bf05_31_t1_r, bf05_56_t1, bf05_06_t1)), na.rm=T),
         extra_curr_par1_t2 = rowMeans(across(c(bf05_01_t2, bf05_41_t2, bf05_26_t2_r, bf05_11_t2_r)), na.rm=T),
         extra_curr_par2_t2 = rowMeans(across(c(bf05_46_t2, bf05_21_t2, bf05_51_t2_r, bf05_36_t2_r)), na.rm=T),
         extra_curr_par3_t2 = rowMeans(across(c(bf05_16_t2_r, bf05_31_t2_r, bf05_56_t2, bf05_06_t2)), na.rm=T),
         extra_curr_par1_t3 = rowMeans(across(c(bf05_01_t3, bf05_41_t3, bf05_26_t3_r, bf05_11_t3_r)), na.rm=T),
         extra_curr_par2_t3 = rowMeans(across(c(bf05_46_t3, bf05_21_t3, bf05_51_t3_r, bf05_36_t3_r)), na.rm=T),
         extra_curr_par3_t3 = rowMeans(across(c(bf05_16_t3_r, bf05_31_t3_r, bf05_56_t3, bf05_06_t3)), na.rm=T))

3.2.2 Extraversion - ideal self

Check CFA item loadings at T1

cfa_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*bf06_01_t1 + lambda1*bf06_01_t1 + lambda2*bf06_06_t1 + lambda3*bf06_11_t1 + lambda4*bf06_16_t1 + lambda5*bf06_21_t1 + lambda6*bf06_26_t1 + lambda7*bf06_31_t1 + lambda8*bf06_36_t1 + lambda9*bf06_41_t1 + lambda10*bf06_46_t1 + lambda11*bf06_51_t1 + lambda12*bf06_56_t1

# Intercepts
bf06_01_t1 ~ i1*1
bf06_06_t1 ~ 1
bf06_11_t1 ~ 1
bf06_16_t1 ~ 1
bf06_21_t1 ~ 1
bf06_26_t1 ~ 1
bf06_31_t1 ~ 1
bf06_36_t1 ~ 1
bf06_41_t1 ~ 1
bf06_46_t1 ~ 1
bf06_51_t1 ~ 1
bf06_56_t1 ~ 1

# Unique Variances
bf06_01_t1 ~~ bf06_01_t1
bf06_06_t1 ~~ bf06_06_t1
bf06_11_t1 ~~ bf06_11_t1
bf06_16_t1 ~~ bf06_16_t1
bf06_21_t1 ~~ bf06_21_t1
bf06_26_t1 ~~ bf06_26_t1
bf06_31_t1 ~~ bf06_31_t1
bf06_36_t1 ~~ bf06_36_t1
bf06_41_t1 ~~ bf06_41_t1
bf06_46_t1 ~~ bf06_46_t1
bf06_51_t1 ~~ bf06_51_t1
bf06_56_t1 ~~ bf06_56_t1

# Latent Variable Means
extra_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
'
fit_cfa_extra_ideal <- cfa(cfa_extra_ideal, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_extra_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 40 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         6            

Model Test User Model:
                                                      
  Test statistic                               254.727
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1146.934
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.814
  Tucker-Lewis Index (TLI)                       0.773
                                                      
  Robust Comparative Fit Index (CFI)             0.816
  Robust Tucker-Lewis Index (TLI)                0.775

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14072.893
  Loglikelihood unrestricted model (H1)     -13945.529
                                                      
  Akaike (AIC)                               28217.786
  Bayesian (BIC)                             28388.529
  Sample-size adjusted Bayesian (SABIC)      28274.204

Root Mean Square Error of Approximation:

  RMSEA                                          0.066
  90 Percent confidence interval - lower         0.058
  90 Percent confidence interval - upper         0.075
  P-value H_0: RMSEA <= 0.050                    0.001
  P-value H_0: RMSEA >= 0.080                    0.003
                                                      
  Robust RMSEA                                   0.066
  90 Percent confidence interval - lower         0.058
  90 Percent confidence interval - upper         0.075
  P-value H_0: Robust RMSEA <= 0.050             0.001
  P-value H_0: Robust RMSEA >= 0.080             0.003

Standardized Root Mean Square Residual:

  SRMR                                           0.049

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  extra_ideal1 =~                                     
    b06_01_ (lmb1)    0.409    0.034   12.191    0.000
    b06_06_ (lmb2)    0.250    0.036    6.881    0.000
    b06_11_ (lmb3)   -0.307    0.054   -5.691    0.000
    b06_16_ (lmb4)   -0.423    0.049   -8.670    0.000
    b06_21_ (lmb5)    0.478    0.042   11.421    0.000
    b06_26_ (lmb6)   -0.430    0.039  -10.915    0.000
    b06_31_ (lmb7)   -0.491    0.042  -11.702    0.000
    b06_36_ (lmb8)   -0.411    0.044   -9.303    0.000
    b06_41_ (lmb9)    0.383    0.029   13.350    0.000
    b06_46_ (lm10)    0.390    0.040    9.738    0.000
    b06_51_ (lm11)   -0.485    0.042  -11.413    0.000
    b06_56_ (lm12)    0.466    0.033   14.281    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_01_1 (i1)    4.237    0.030  142.383    0.000
   .bf06_06_1         4.128    0.031  132.290    0.000
   .bf06_11_1         2.257    0.046   48.598    0.000
   .bf06_16_1         2.857    0.042   68.327    0.000
   .bf06_21_1         3.803    0.037  102.781    0.000
   .bf06_26_1         1.722    0.035   49.589    0.000
   .bf06_31_1         2.184    0.037   59.386    0.000
   .bf06_36_1         2.201    0.038   57.183    0.000
   .bf06_41_1         4.471    0.025  176.151    0.000
   .bf06_46_1         3.713    0.035  105.946    0.000
   .bf06_51_1         2.392    0.037   64.098    0.000
   .bf06_56_1         4.265    0.029  146.413    0.000
    extra_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_01_t1        0.580    0.032   18.206    0.000
   .bf06_06_t1        0.760    0.038   19.886    0.000
   .bf06_11_t1        1.733    0.086   20.146    0.000
   .bf06_16_t1        1.301    0.067   19.369    0.000
   .bf06_21_t1        0.930    0.050   18.530    0.000
   .bf06_26_t1        0.834    0.044   18.786    0.000
   .bf06_31_t1        0.901    0.049   18.265    0.000
   .bf06_36_t1        1.083    0.056   19.300    0.000
   .bf06_41_t1        0.399    0.023   17.422    0.000
   .bf06_46_t1        0.887    0.046   19.161    0.000
   .bf06_51_t1        0.942    0.051   18.479    0.000
   .bf06_56_t1        0.502    0.030   16.791    0.000
    extra_ideal1      1.000                           
tidy(fit_cfa_extra_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 extra_ideal1 =~ bf06_31_t1 =~    lambda7    -0.491    0.0419  -0.459
 2 extra_ideal1 =~ bf06_51_t1 =~    lambda11   -0.485    0.0425  -0.447
 3 extra_ideal1 =~ bf06_21_t1 =~    lambda5     0.478    0.0418   0.444
 4 extra_ideal1 =~ bf06_56_t1 =~    lambda12    0.466    0.0326   0.549
 5 extra_ideal1 =~ bf06_26_t1 =~    lambda6    -0.430    0.0394  -0.426
 6 extra_ideal1 =~ bf06_16_t1 =~    lambda4    -0.423    0.0488  -0.348
 7 extra_ideal1 =~ bf06_36_t1 =~    lambda8    -0.411    0.0442  -0.367
 8 extra_ideal1 =~ bf06_01_t1 =~    lambda1     0.409    0.0336   0.473
 9 extra_ideal1 =~ bf06_46_t1 =~    lambda10    0.390    0.0400   0.382
10 extra_ideal1 =~ bf06_41_t1 =~    lambda9     0.383    0.0287   0.518
11 extra_ideal1 =~ bf06_11_t1 =~    lambda3    -0.307    0.0540  -0.227
12 extra_ideal1 =~ bf06_06_t1 =~    lambda2     0.250    0.0364   0.276

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf06_31_t1_r = bf06_31_t1,
         bf06_16_t1_r = bf06_16_t1,
         bf06_26_t1_r = bf06_26_t1,
         bf06_51_t1_r = bf06_51_t1,
         bf06_36_t1_r = bf06_36_t1,
         bf06_11_t1_r = bf06_11_t1,
         bf06_31_t2_r = bf06_31_t2,
         bf06_16_t2_r = bf06_16_t2,
         bf06_26_t2_r = bf06_26_t2,
         bf06_51_t2_r = bf06_51_t2,
         bf06_36_t2_r = bf06_36_t2,
         bf06_11_t2_r = bf06_11_t2,
         bf06_31_t3_r = bf06_31_t3,
         bf06_16_t3_r = bf06_16_t3,
         bf06_26_t3_r = bf06_26_t3,
         bf06_51_t3_r = bf06_51_t3,
         bf06_36_t3_r = bf06_36_t3,
         bf06_11_t3_r = bf06_11_t3) %>% 
  mutate(across(c(bf06_31_t1_r, bf06_16_t1_r, bf06_26_t1_r, bf06_51_t1_r, bf06_36_t1_r, bf06_11_t1_r, 
                  bf06_31_t2_r, bf06_16_t2_r, bf06_26_t2_r, bf06_51_t2_r, bf06_36_t2_r, bf06_11_t2_r, 
                  bf06_31_t3_r, bf06_16_t3_r, bf06_26_t3_r, bf06_51_t3_r, bf06_36_t3_r, bf06_11_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(extra_ideal_par1_t1 = rowMeans(across(c(bf06_31_t1_r, bf06_16_t1_r, bf06_46_t1, bf06_06_t1)), na.rm=T),
         extra_ideal_par2_t1 = rowMeans(across(c(bf06_21_t1, bf06_26_t1_r, bf06_01_t1, bf06_11_t1_r)), na.rm=T),
         extra_ideal_par3_t1 = rowMeans(across(c(bf06_51_t1_r, bf06_56_t1, bf06_36_t1_r, bf06_41_t1)), na.rm=T),
         extra_ideal_par1_t2 = rowMeans(across(c(bf06_31_t2_r, bf06_16_t2_r, bf06_46_t2, bf06_06_t2)), na.rm=T),
         extra_ideal_par2_t2 = rowMeans(across(c(bf06_21_t2, bf06_26_t2_r, bf06_01_t2, bf06_11_t2_r)), na.rm=T),
         extra_ideal_par3_t2 = rowMeans(across(c(bf06_51_t2_r, bf06_56_t2, bf06_36_t2_r, bf06_41_t2)), na.rm=T),
         extra_ideal_par1_t3 = rowMeans(across(c(bf06_31_t3_r, bf06_16_t3_r, bf06_46_t3, bf06_06_t3)), na.rm=T),
         extra_ideal_par2_t3 = rowMeans(across(c(bf06_21_t3, bf06_26_t3_r, bf06_01_t3, bf06_11_t3_r)), na.rm=T),
         extra_ideal_par3_t3 = rowMeans(across(c(bf06_51_t3_r, bf06_56_t3, bf06_36_t3_r, bf06_41_t3)), na.rm=T))

3.2.3 Agreeableness - current self

Check CFA item loadings at T1

cfa_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*bf05_02_t1 + lambda1*bf05_02_t1 + lambda2*bf05_07_t1 + lambda3*bf05_12_t1 + lambda4*bf05_17_t1 + lambda5*bf05_22_t1 + lambda6*bf05_27_t1 + lambda7*bf05_32_t1 + lambda8*bf05_37_t1 + lambda9*bf05_42_t1 + lambda10*bf05_47_t1 + lambda11*bf05_52_t1 + lambda12*bf05_57_t1

# Intercepts
bf05_02_t1 ~ i1*1
bf05_07_t1 ~ 1
bf05_12_t1 ~ 1
bf05_17_t1 ~ 1
bf05_22_t1 ~ 1
bf05_27_t1 ~ 1
bf05_32_t1 ~ 1
bf05_37_t1 ~ 1
bf05_42_t1 ~ 1
bf05_47_t1 ~ 1
bf05_52_t1 ~ 1
bf05_57_t1 ~ 1

# Unique Variances
bf05_02_t1 ~~ bf05_02_t1
bf05_07_t1 ~~ bf05_07_t1
bf05_12_t1 ~~ bf05_12_t1
bf05_17_t1 ~~ bf05_17_t1
bf05_22_t1 ~~ bf05_22_t1
bf05_27_t1 ~~ bf05_27_t1
bf05_32_t1 ~~ bf05_32_t1
bf05_37_t1 ~~ bf05_37_t1
bf05_42_t1 ~~ bf05_42_t1
bf05_47_t1 ~~ bf05_47_t1
bf05_52_t1 ~~ bf05_52_t1
bf05_57_t1 ~~ bf05_57_t1

# Latent Variable Means
agree_curr1 ~ 0*1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
'
fit_cfa_agree_curr <- cfa(cfa_agree_curr, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_agree_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 41 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         3            

Model Test User Model:
                                                      
  Test statistic                               532.762
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2295.706
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.785
  Tucker-Lewis Index (TLI)                       0.738
                                                      
  Robust Comparative Fit Index (CFI)             0.785
  Robust Tucker-Lewis Index (TLI)                0.737

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14316.892
  Loglikelihood unrestricted model (H1)     -14050.512
                                                      
  Akaike (AIC)                               28705.785
  Bayesian (BIC)                             28876.529
  Sample-size adjusted Bayesian (SABIC)      28762.203

Root Mean Square Error of Approximation:

  RMSEA                                          0.102
  90 Percent confidence interval - lower         0.094
  90 Percent confidence interval - upper         0.110
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.102
  90 Percent confidence interval - lower         0.094
  90 Percent confidence interval - upper         0.110
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.065

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  agree_curr1 =~                                      
    b05_02_ (lmb1)    0.483    0.031   15.345    0.000
    b05_07_ (lmb2)    0.430    0.025   17.189    0.000
    b05_12_ (lmb3)   -0.606    0.044  -13.801    0.000
    b05_17_ (lmb4)   -0.182    0.055   -3.291    0.001
    b05_22_ (lmb5)   -0.643    0.043  -15.116    0.000
    b05_27_ (lmb6)    0.595    0.042   14.270    0.000
    b05_32_ (lmb7)    0.529    0.032   16.781    0.000
    b05_37_ (lmb8)   -0.741    0.044  -17.020    0.000
    b05_42_ (lmb9)   -0.419    0.045   -9.406    0.000
    b05_47_ (lm10)   -0.789    0.044  -17.761    0.000
    b05_52_ (lm11)    0.418    0.025   16.841    0.000
    b05_57_ (lm12)    0.558    0.043   12.968    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_02_1 (i1)    4.188    0.031  136.262    0.000
   .bf05_07_1         4.449    0.025  179.500    0.000
   .bf05_12_1         2.877    0.042   68.327    0.000
   .bf05_17_1         2.667    0.050   52.975    0.000
   .bf05_22_1         2.172    0.041   52.346    0.000
   .bf05_27_1         3.598    0.040   89.031    0.000
   .bf05_32_1         3.963    0.031  126.684    0.000
   .bf05_37_1         2.486    0.043   57.567    0.000
   .bf05_42_1         3.590    0.041   87.538    0.000
   .bf05_47_1         2.526    0.045   56.750    0.000
   .bf05_52_1         4.300    0.025  175.434    0.000
   .bf05_57_1         3.201    0.041   78.189    0.000
    agre_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_02_t1        0.567    0.031   18.581    0.000
   .bf05_07_t1        0.336    0.019   17.849    0.000
   .bf05_12_t1        1.137    0.060   18.981    0.000
   .bf05_17_t1        2.113    0.103   20.507    0.000
   .bf05_22_t1        1.045    0.056   18.699    0.000
   .bf05_27_t1        1.029    0.054   18.970    0.000
   .bf05_32_t1        0.550    0.030   18.167    0.000
   .bf05_37_t1        1.031    0.057   17.986    0.000
   .bf05_42_t1        1.250    0.063   19.829    0.000
   .bf05_47_t1        1.056    0.059   17.798    0.000
   .bf05_52_t1        0.335    0.019   17.988    0.000
   .bf05_57_t1        1.109    0.058   19.161    0.000
    agree_curr1       1.000                           
tidy(fit_cfa_agree_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 agree_curr1 =~ bf05_47_t1 =~    lambda10   -0.789    0.0444  -0.609
 2 agree_curr1 =~ bf05_37_t1 =~    lambda8    -0.741    0.0435  -0.589
 3 agree_curr1 =~ bf05_22_t1 =~    lambda5    -0.643    0.0425  -0.532
 4 agree_curr1 =~ bf05_12_t1 =~    lambda3    -0.606    0.0439  -0.494
 5 agree_curr1 =~ bf05_27_t1 =~    lambda6     0.595    0.0417   0.506
 6 agree_curr1 =~ bf05_57_t1 =~    lambda12    0.558    0.0430   0.468
 7 agree_curr1 =~ bf05_32_t1 =~    lambda7     0.529    0.0315   0.581
 8 agree_curr1 =~ bf05_02_t1 =~    lambda1     0.483    0.0315   0.540
 9 agree_curr1 =~ bf05_07_t1 =~    lambda2     0.430    0.0250   0.595
10 agree_curr1 =~ bf05_42_t1 =~    lambda9    -0.419    0.0446  -0.351
11 agree_curr1 =~ bf05_52_t1 =~    lambda11    0.418    0.0248   0.585
12 agree_curr1 =~ bf05_17_t1 =~    lambda4    -0.182    0.0554  -0.124

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf05_47_t1_r = bf05_47_t1,
         bf05_37_t1_r = bf05_37_t1,
         bf05_22_t1_r = bf05_22_t1,
         bf05_12_t1_r = bf05_12_t1,
         bf05_42_t1_r = bf05_42_t1,
         bf05_17_t1_r = bf05_17_t1,
         bf05_47_t2_r = bf05_47_t2,
         bf05_37_t2_r = bf05_37_t2,
         bf05_22_t2_r = bf05_22_t2,
         bf05_12_t2_r = bf05_12_t2,
         bf05_42_t2_r = bf05_42_t2,
         bf05_17_t2_r = bf05_17_t2,
         bf05_47_t3_r = bf05_47_t3,
         bf05_37_t3_r = bf05_37_t3,
         bf05_22_t3_r = bf05_22_t3,
         bf05_12_t3_r = bf05_12_t3,
         bf05_42_t3_r = bf05_42_t3,
         bf05_17_t3_r = bf05_17_t3) %>% 
  mutate(across(c(bf05_47_t1_r, bf05_37_t1_r, bf05_22_t1_r, bf05_12_t1_r, bf05_42_t1_r, bf05_17_t1_r, 
                  bf05_47_t2_r, bf05_37_t2_r, bf05_22_t2_r, bf05_12_t2_r, bf05_42_t2_r, bf05_17_t2_r, 
                  bf05_47_t3_r, bf05_37_t3_r, bf05_22_t3_r, bf05_12_t3_r, bf05_42_t3_r, bf05_17_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(agree_curr_par1_t1 = rowMeans(across(c(bf05_47_t1_r, bf05_57_t1, bf05_07_t1, bf05_17_t1)), na.rm=T),
         agree_curr_par2_t1 = rowMeans(across(c(bf05_37_t1_r, bf05_27_t1, bf05_02_t1, bf05_52_t1)), na.rm=T),
         agree_curr_par3_t1 = rowMeans(across(c(bf05_22_t1_r, bf05_12_t1_r, bf05_32_t1, bf05_42_t1)), na.rm=T),
         agree_curr_par1_t2 = rowMeans(across(c(bf05_47_t2_r, bf05_57_t2, bf05_07_t2, bf05_17_t2)), na.rm=T),
         agree_curr_par2_t2 = rowMeans(across(c(bf05_37_t2_r, bf05_27_t2, bf05_02_t2, bf05_52_t2)), na.rm=T),
         agree_curr_par3_t2 = rowMeans(across(c(bf05_22_t2_r, bf05_12_t2_r, bf05_32_t2, bf05_42_t2)), na.rm=T),
         agree_curr_par1_t3 = rowMeans(across(c(bf05_47_t3_r, bf05_57_t3, bf05_07_t3, bf05_17_t3)), na.rm=T),
         agree_curr_par2_t3 = rowMeans(across(c(bf05_37_t3_r, bf05_27_t3, bf05_02_t3, bf05_52_t3)), na.rm=T),
         agree_curr_par3_t3 = rowMeans(across(c(bf05_22_t3_r, bf05_12_t3_r, bf05_32_t3, bf05_42_t3)), na.rm=T))

3.2.4 Agreeableness - ideal self

Check CFA item loadings at T1

cfa_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*bf06_02_t1 + lambda1*bf06_02_t1 + lambda2*bf06_07_t1 + lambda3*bf06_12_t1 + lambda4*bf06_17_t1 + lambda5*bf06_22_t1 + lambda6*bf06_27_t1 + lambda7*bf06_32_t1 + lambda8*bf06_37_t1 + lambda9*bf06_42_t1 + lambda10*bf06_47_t1 + lambda11*bf06_52_t1 + lambda12*bf06_57_t1

# Intercepts
bf06_02_t1 ~ i1*1
bf06_07_t1 ~ 1
bf06_12_t1 ~ 1
bf06_17_t1 ~ 1
bf06_22_t1 ~ 1
bf06_27_t1 ~ 1
bf06_32_t1 ~ 1
bf06_37_t1 ~ 1
bf06_42_t1 ~ 1
bf06_47_t1 ~ 1
bf06_52_t1 ~ 1
bf06_57_t1 ~ 1

# Unique Variances
bf06_02_t1 ~~ bf06_02_t1
bf06_07_t1 ~~ bf06_07_t1
bf06_12_t1 ~~ bf06_12_t1
bf06_17_t1 ~~ bf06_17_t1
bf06_22_t1 ~~ bf06_22_t1
bf06_27_t1 ~~ bf06_27_t1
bf06_32_t1 ~~ bf06_32_t1
bf06_37_t1 ~~ bf06_37_t1
bf06_42_t1 ~~ bf06_42_t1
bf06_47_t1 ~~ bf06_47_t1
bf06_52_t1 ~~ bf06_52_t1
bf06_57_t1 ~~ bf06_57_t1

# Latent Variable Means
agree_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
'
fit_cfa_agree_ideal <- cfa(cfa_agree_ideal, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_agree_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 42 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           847         849
  Number of missing patterns                         4            

Model Test User Model:
                                                      
  Test statistic                               233.018
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2098.126
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.912
  Tucker-Lewis Index (TLI)                       0.892
                                                      
  Robust Comparative Fit Index (CFI)             0.912
  Robust Tucker-Lewis Index (TLI)                0.892

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -13331.073
  Loglikelihood unrestricted model (H1)     -13214.564
                                                      
  Akaike (AIC)                               26734.147
  Bayesian (BIC)                             26904.848
  Sample-size adjusted Bayesian (SABIC)      26790.523

Root Mean Square Error of Approximation:

  RMSEA                                          0.063
  90 Percent confidence interval - lower         0.054
  90 Percent confidence interval - upper         0.071
  P-value H_0: RMSEA <= 0.050                    0.006
  P-value H_0: RMSEA >= 0.080                    0.000
                                                      
  Robust RMSEA                                   0.063
  90 Percent confidence interval - lower         0.055
  90 Percent confidence interval - upper         0.071
  P-value H_0: Robust RMSEA <= 0.050             0.006
  P-value H_0: Robust RMSEA >= 0.080             0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.041

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  agree_ideal1 =~                                     
    b06_02_ (lmb1)    0.528    0.032   16.391    0.000
    b06_07_ (lmb2)    0.365    0.023   15.818    0.000
    b06_12_ (lmb3)   -0.515    0.035  -14.679    0.000
    b06_17_ (lmb4)   -0.143    0.059   -2.413    0.016
    b06_22_ (lmb5)   -0.492    0.037  -13.306    0.000
    b06_27_ (lmb6)    0.612    0.037   16.352    0.000
    b06_32_ (lmb7)    0.509    0.032   15.871    0.000
    b06_37_ (lmb8)   -0.511    0.029  -17.449    0.000
    b06_42_ (lmb9)   -0.462    0.044  -10.587    0.000
    b06_47_ (lm10)   -0.716    0.037  -19.412    0.000
    b06_52_ (lm11)    0.452    0.024   18.543    0.000
    b06_57_ (lm12)    0.496    0.037   13.514    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_02_1 (i1)    4.269    0.032  133.231    0.000
   .bf06_07_1         4.650    0.023  204.363    0.000
   .bf06_12_1         1.913    0.034   55.740    0.000
   .bf06_17_1         2.585    0.054   47.665    0.000
   .bf06_22_1         1.789    0.036   49.972    0.000
   .bf06_27_1         3.911    0.037  104.943    0.000
   .bf06_32_1         4.304    0.032  135.497    0.000
   .bf06_37_1         1.633    0.029   55.361    0.000
   .bf06_42_1         2.758    0.041   66.971    0.000
   .bf06_47_1         1.861    0.038   49.122    0.000
   .bf06_52_1         4.540    0.025  183.437    0.000
   .bf06_57_1         3.787    0.036  106.585    0.000
    agree_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_02_t1        0.590    0.032   18.476    0.000
   .bf06_07_t1        0.305    0.016   18.590    0.000
   .bf06_12_t1        0.731    0.039   18.964    0.000
   .bf06_17_t1        2.468    0.120   20.531    0.000
   .bf06_22_t1        0.842    0.044   19.317    0.000
   .bf06_27_t1        0.801    0.043   18.535    0.000
   .bf06_32_t1        0.593    0.032   18.663    0.000
   .bf06_37_t1        0.474    0.026   18.155    0.000
   .bf06_42_t1        1.220    0.062   19.775    0.000
   .bf06_47_t1        0.701    0.040   17.349    0.000
   .bf06_52_t1        0.314    0.018   17.648    0.000
   .bf06_57_t1        0.822    0.043   19.256    0.000
    agree_ideal1      1.000                           
tidy(fit_cfa_agree_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 agree_ideal1 =~ bf06_47_t1 =~    lambda10   -0.716    0.0369 -0.650 
 2 agree_ideal1 =~ bf06_27_t1 =~    lambda6     0.612    0.0374  0.565 
 3 agree_ideal1 =~ bf06_02_t1 =~    lambda1     0.528    0.0322  0.567 
 4 agree_ideal1 =~ bf06_12_t1 =~    lambda3    -0.515    0.0351 -0.516 
 5 agree_ideal1 =~ bf06_37_t1 =~    lambda8    -0.511    0.0293 -0.596 
 6 agree_ideal1 =~ bf06_32_t1 =~    lambda7     0.509    0.0321  0.551 
 7 agree_ideal1 =~ bf06_57_t1 =~    lambda12    0.496    0.0367  0.480 
 8 agree_ideal1 =~ bf06_22_t1 =~    lambda5    -0.492    0.0370 -0.473 
 9 agree_ideal1 =~ bf06_42_t1 =~    lambda9    -0.462    0.0436 -0.386 
10 agree_ideal1 =~ bf06_52_t1 =~    lambda11    0.452    0.0244  0.628 
11 agree_ideal1 =~ bf06_07_t1 =~    lambda2     0.365    0.0230  0.551 
12 agree_ideal1 =~ bf06_17_t1 =~    lambda4    -0.143    0.0594 -0.0909

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf06_47_t1_r = bf06_47_t1,
         bf06_37_t1_r = bf06_37_t1,
         bf06_22_t1_r = bf06_22_t1,
         bf06_12_t1_r = bf06_12_t1,
         bf06_42_t1_r = bf06_42_t1,
         bf06_17_t1_r = bf06_17_t1,
         bf06_47_t2_r = bf06_47_t2,
         bf06_37_t2_r = bf06_37_t2,
         bf06_22_t2_r = bf06_22_t2,
         bf06_12_t2_r = bf06_12_t2,
         bf06_42_t2_r = bf06_42_t2,
         bf06_17_t2_r = bf06_17_t2,
         bf06_47_t3_r = bf06_47_t3,
         bf06_37_t3_r = bf06_37_t3,
         bf06_22_t3_r = bf06_22_t3,
         bf06_12_t3_r = bf06_12_t3,
         bf06_42_t3_r = bf06_42_t3,
         bf06_17_t3_r = bf06_17_t3) %>% 
  mutate(across(c(bf06_47_t1_r, bf06_37_t1_r, bf06_22_t1_r, bf06_12_t1_r, bf06_42_t1_r, bf06_17_t1_r, 
                  bf06_47_t2_r, bf06_37_t2_r, bf06_22_t2_r, bf06_12_t2_r, bf06_42_t2_r, bf06_17_t2_r, 
                  bf06_47_t3_r, bf06_37_t3_r, bf06_22_t3_r, bf06_12_t3_r, bf06_42_t3_r, bf06_17_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(agree_ideal_par1_t1 = rowMeans(across(c(bf06_47_t1_r, bf06_32_t1, bf06_42_t1_r, bf06_17_t1_r)), na.rm=T),
         agree_ideal_par2_t1 = rowMeans(across(c(bf06_27_t1, bf06_37_t1_r, bf06_22_t1_r, bf06_07_t1)), na.rm=T),
         agree_ideal_par3_t1 = rowMeans(across(c(bf06_02_t1, bf06_12_t1_r, bf06_57_t1, bf06_52_t1)), na.rm=T),
         agree_ideal_par1_t2 = rowMeans(across(c(bf06_47_t2_r, bf06_32_t2, bf06_42_t2_r, bf06_17_t2_r)), na.rm=T),
         agree_ideal_par2_t2 = rowMeans(across(c(bf06_27_t2, bf06_37_t2_r, bf06_22_t2_r, bf06_07_t2)), na.rm=T),
         agree_ideal_par3_t2 = rowMeans(across(c(bf06_02_t2, bf06_12_t2_r, bf06_57_t2, bf06_52_t2)), na.rm=T),
         agree_ideal_par1_t3 = rowMeans(across(c(bf06_47_t3_r, bf06_32_t3, bf06_42_t3_r, bf06_17_t3_r)), na.rm=T),
         agree_ideal_par2_t3 = rowMeans(across(c(bf06_27_t3, bf06_37_t3_r, bf06_22_t3_r, bf06_07_t3)), na.rm=T),
         agree_ideal_par3_t3 = rowMeans(across(c(bf06_02_t3, bf06_12_t3_r, bf06_57_t3, bf06_52_t3)), na.rm=T))

3.2.5 Conscientiousness - current self

Check CFA item loadings at T1

cfa_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*bf05_03_t1 + lambda1*bf05_03_t1 + lambda2*bf05_08_t1 + lambda3*bf05_13_t1 + lambda4*bf05_18_t1 + lambda5*bf05_23_t1 + lambda6*bf05_28_t1 + lambda7*bf05_33_t1 + lambda8*bf05_38_t1 + lambda9*bf05_43_t1 + lambda10*bf05_48_t1 + lambda11*bf05_53_t1 + lambda12*bf05_58_t1
# Intercepts
bf05_03_t1 ~ i1*1
bf05_08_t1 ~ 1
bf05_13_t1 ~ 1
bf05_18_t1 ~ 1
bf05_23_t1 ~ 1
bf05_28_t1 ~ 1
bf05_33_t1 ~ 1
bf05_38_t1 ~ 1
bf05_43_t1 ~ 1
bf05_48_t1 ~ 1
bf05_53_t1 ~ 1
bf05_58_t1 ~ 1

# Unique Variances
bf05_03_t1 ~~ bf05_03_t1
bf05_08_t1 ~~ bf05_08_t1
bf05_13_t1 ~~ bf05_13_t1
bf05_18_t1 ~~ bf05_18_t1
bf05_23_t1 ~~ bf05_23_t1
bf05_28_t1 ~~ bf05_28_t1
bf05_33_t1 ~~ bf05_33_t1
bf05_38_t1 ~~ bf05_38_t1
bf05_43_t1 ~~ bf05_43_t1
bf05_48_t1 ~~ bf05_48_t1
bf05_53_t1 ~~ bf05_53_t1
bf05_58_t1 ~~ bf05_58_t1

# Latent Variable Means
consc_curr1 ~ 0*1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
'
fit_cfa_consc_curr <- cfa(cfa_consc_curr, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_consc_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 39 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         4            

Model Test User Model:
                                                      
  Test statistic                               801.533
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              3586.088
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.788
  Tucker-Lewis Index (TLI)                       0.740
                                                      
  Robust Comparative Fit Index (CFI)             0.788
  Robust Tucker-Lewis Index (TLI)                0.740

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14696.583
  Loglikelihood unrestricted model (H1)     -14295.816
                                                      
  Akaike (AIC)                               29465.166
  Bayesian (BIC)                             29635.910
  Sample-size adjusted Bayesian (SABIC)      29521.584

Root Mean Square Error of Approximation:

  RMSEA                                          0.128
  90 Percent confidence interval - lower         0.120
  90 Percent confidence interval - upper         0.136
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.128
  90 Percent confidence interval - lower         0.120
  90 Percent confidence interval - upper         0.136
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.073

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  consc_curr1 =~                                      
    b05_03_ (lmb1)    1.014    0.044   23.242    0.000
    b05_08_ (lmb2)    0.808    0.042   19.245    0.000
    b05_13_ (lmb3)   -0.380    0.039   -9.805    0.000
    b05_18_ (lmb4)   -0.733    0.037  -19.560    0.000
    b05_23_ (lmb5)    0.801    0.043   18.440    0.000
    b05_28_ (lmb6)    0.720    0.043   16.786    0.000
    b05_33_ (lmb7)   -0.793    0.037  -21.311    0.000
    b05_38_ (lmb8)   -0.637    0.033  -19.029    0.000
    b05_43_ (lmb9)   -0.470    0.034  -13.894    0.000
    b05_48_ (lm10)    0.719    0.039   18.599    0.000
    b05_53_ (lm11)   -0.634    0.037  -17.019    0.000
    b05_58_ (lm12)    0.684    0.044   15.680    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_03_1 (i1)    2.894    0.048   60.442    0.000
   .bf05_08_1         3.440    0.044   78.102    0.000
   .bf05_13_1         3.625    0.037   97.459    0.000
   .bf05_18_1         3.576    0.039   90.816    0.000
   .bf05_23_1         3.366    0.045   74.573    0.000
   .bf05_28_1         2.879    0.044   65.754    0.000
   .bf05_33_1         3.409    0.040   85.611    0.000
   .bf05_38_1         3.703    0.035  106.023    0.000
   .bf05_43_1         3.986    0.033  119.068    0.000
   .bf05_48_1         2.094    0.040   52.070    0.000
   .bf05_53_1         3.775    0.038   99.069    0.000
   .bf05_58_1         2.769    0.044   62.917    0.000
    cnsc_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_03_t1        0.915    0.054   17.080    0.000
   .bf05_08_t1        0.992    0.054   18.527    0.000
   .bf05_13_t1        1.028    0.051   20.118    0.000
   .bf05_18_t1        0.776    0.042   18.328    0.000
   .bf05_23_t1        1.085    0.058   18.700    0.000
   .bf05_28_t1        1.105    0.058   19.059    0.000
   .bf05_33_t1        0.714    0.040   17.661    0.000
   .bf05_38_t1        0.629    0.034   18.474    0.000
   .bf05_43_t1        0.729    0.037   19.538    0.000
   .bf05_48_t1        0.854    0.046   18.661    0.000
   .bf05_53_t1        0.829    0.044   19.001    0.000
   .bf05_58_t1        1.174    0.061   19.285    0.000
    consc_curr1       1.000                           
tidy(fit_cfa_consc_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 consc_curr1 =~ bf05_03_t1 =~    lambda1     1.01     0.0436   0.727
 2 consc_curr1 =~ bf05_08_t1 =~    lambda2     0.808    0.0420   0.630
 3 consc_curr1 =~ bf05_23_t1 =~    lambda5     0.801    0.0435   0.610
 4 consc_curr1 =~ bf05_33_t1 =~    lambda7    -0.793    0.0372  -0.684
 5 consc_curr1 =~ bf05_18_t1 =~    lambda4    -0.733    0.0375  -0.640
 6 consc_curr1 =~ bf05_28_t1 =~    lambda6     0.720    0.0429   0.565
 7 consc_curr1 =~ bf05_48_t1 =~    lambda10    0.719    0.0386   0.614
 8 consc_curr1 =~ bf05_58_t1 =~    lambda12    0.684    0.0436   0.534
 9 consc_curr1 =~ bf05_38_t1 =~    lambda8    -0.637    0.0335  -0.626
10 consc_curr1 =~ bf05_53_t1 =~    lambda11   -0.634    0.0373  -0.572
11 consc_curr1 =~ bf05_43_t1 =~    lambda9    -0.470    0.0339  -0.483
12 consc_curr1 =~ bf05_13_t1 =~    lambda3    -0.380    0.0387  -0.351

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf05_03_t1_r = bf05_03_t1,
         bf05_23_t1_r = bf05_23_t1,
         bf05_48_t1_r = bf05_48_t1,
         bf05_08_t1_r = bf05_08_t1,
         bf05_28_t1_r = bf05_28_t1,
         bf05_58_t1_r = bf05_58_t1,
         bf05_03_t2_r = bf05_03_t2,
         bf05_23_t2_r = bf05_23_t2,
         bf05_48_t2_r = bf05_48_t2,
         bf05_08_t2_r = bf05_08_t2,
         bf05_28_t2_r = bf05_28_t2,
         bf05_58_t2_r = bf05_58_t2,
         bf05_03_t3_r = bf05_03_t3,
         bf05_23_t3_r = bf05_23_t3,
         bf05_48_t3_r = bf05_48_t3,
         bf05_08_t3_r = bf05_08_t3,
         bf05_28_t3_r = bf05_28_t3,
         bf05_58_t3_r = bf05_58_t3) %>% 
  mutate(across(c(bf05_03_t1_r, bf05_23_t1_r, bf05_48_t1_r, bf05_08_t1_r, bf05_28_t1_r, bf05_58_t1_r,
                  bf05_03_t2_r, bf05_23_t2_r, bf05_48_t2_r, bf05_08_t2_r, bf05_28_t2_r, bf05_58_t2_r,
                  bf05_03_t3_r, bf05_23_t3_r, bf05_48_t3_r, bf05_08_t3_r, bf05_28_t3_r, bf05_58_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(consc_curr_par1_t1 = rowMeans(across(c(bf05_03_t1_r, bf05_28_t1_r, bf05_38_t1, bf05_13_t1)), na.rm=T),
         consc_curr_par2_t1 = rowMeans(across(c(bf05_08_t1_r, bf05_18_t1, bf05_58_t1_r, bf05_43_t1)), na.rm=T),
         consc_curr_par3_t1 = rowMeans(across(c(bf05_23_t1_r, bf05_33_t1, bf05_48_t1_r, bf05_53_t1)), na.rm=T),
         consc_curr_par1_t2 = rowMeans(across(c(bf05_03_t2_r, bf05_28_t2_r, bf05_38_t2, bf05_13_t2)), na.rm=T),
         consc_curr_par2_t2 = rowMeans(across(c(bf05_08_t2_r, bf05_18_t2, bf05_58_t2_r, bf05_43_t2)), na.rm=T),
         consc_curr_par3_t2 = rowMeans(across(c(bf05_23_t2_r, bf05_33_t2, bf05_48_t2_r, bf05_53_t2)), na.rm=T),
         consc_curr_par1_t3 = rowMeans(across(c(bf05_03_t3_r, bf05_28_t3_r, bf05_38_t3, bf05_13_t3)), na.rm=T),
         consc_curr_par2_t3 = rowMeans(across(c(bf05_08_t3_r, bf05_18_t3, bf05_58_t3_r, bf05_43_t3)), na.rm=T),
         consc_curr_par3_t3 = rowMeans(across(c(bf05_23_t3_r, bf05_33_t3, bf05_48_t3_r, bf05_53_t3)), na.rm=T))

3.2.6 Conscientiousness - ideal self

Check CFA item loadings at T1

cfa_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*bf06_03_t1 + lambda1*bf06_03_t1 + lambda2*bf06_08_t1 + lambda3*bf06_13_t1 + lambda4*bf06_18_t1 + lambda5*bf06_23_t1 + lambda6*bf06_28_t1 + lambda7*bf06_33_t1 + lambda8*bf06_38_t1 + lambda9*bf06_43_t1 + lambda10*bf06_48_t1 + lambda11*bf06_53_t1 + lambda12*bf06_58_t1
# Intercepts
bf06_03_t1 ~ i1*1
bf06_08_t1 ~ 1
bf06_13_t1 ~ 1
bf06_18_t1 ~ 1
bf06_23_t1 ~ 1
bf06_28_t1 ~ 1
bf06_33_t1 ~ 1
bf06_38_t1 ~ 1
bf06_43_t1 ~ 1
bf06_48_t1 ~ 1
bf06_53_t1 ~ 1
bf06_58_t1 ~ 1

# Unique Variances
bf06_03_t1 ~~ bf06_03_t1
bf06_08_t1 ~~ bf06_08_t1
bf06_13_t1 ~~ bf06_13_t1
bf06_18_t1 ~~ bf06_18_t1
bf06_23_t1 ~~ bf06_23_t1
bf06_28_t1 ~~ bf06_28_t1
bf06_33_t1 ~~ bf06_33_t1
bf06_38_t1 ~~ bf06_38_t1
bf06_43_t1 ~~ bf06_43_t1
bf06_48_t1 ~~ bf06_48_t1
bf06_53_t1 ~~ bf06_53_t1
bf06_58_t1 ~~ bf06_58_t1

# Latent Variable Means
consc_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
'
fit_cfa_consc_ideal <- cfa(cfa_consc_ideal, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_consc_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 41 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               261.132
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2186.521
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.902
  Tucker-Lewis Index (TLI)                       0.881
                                                      
  Robust Comparative Fit Index (CFI)             0.902
  Robust Tucker-Lewis Index (TLI)                0.880

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -11827.022
  Loglikelihood unrestricted model (H1)     -11696.456
                                                      
  Akaike (AIC)                               23726.045
  Bayesian (BIC)                             23896.788
  Sample-size adjusted Bayesian (SABIC)      23782.463

Root Mean Square Error of Approximation:

  RMSEA                                          0.067
  90 Percent confidence interval - lower         0.059
  90 Percent confidence interval - upper         0.076
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.005
                                                      
  Robust RMSEA                                   0.067
  90 Percent confidence interval - lower         0.059
  90 Percent confidence interval - upper         0.076
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.006

Standardized Root Mean Square Residual:

  SRMR                                           0.044

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  consc_ideal1 =~                                     
    b06_03_ (lmb1)    0.441    0.042   10.435    0.000
    b06_08_ (lmb2)    0.412    0.032   12.845    0.000
    b06_13_ (lmb3)   -0.368    0.042   -8.845    0.000
    b06_18_ (lmb4)   -0.417    0.028  -14.929    0.000
    b06_23_ (lmb5)    0.451    0.029   15.561    0.000
    b06_28_ (lmb6)    0.577    0.035   16.264    0.000
    b06_33_ (lmb7)   -0.403    0.026  -15.487    0.000
    b06_38_ (lmb8)   -0.445    0.023  -19.306    0.000
    b06_43_ (lmb9)   -0.419    0.025  -16.913    0.000
    b06_48_ (lm10)    0.419    0.027   15.427    0.000
    b06_53_ (lm11)   -0.433    0.021  -20.174    0.000
    b06_58_ (lm12)    0.494    0.034   14.373    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_03_1 (i1)    1.718    0.040   42.978    0.000
   .bf06_08_1         1.606    0.031   51.992    0.000
   .bf06_13_1         4.196    0.039  107.674    0.000
   .bf06_18_1         4.352    0.027  158.625    0.000
   .bf06_23_1         1.488    0.029   51.993    0.000
   .bf06_28_1         1.857    0.035   52.569    0.000
   .bf06_33_1         4.460    0.026  173.589    0.000
   .bf06_38_1         4.642    0.024  195.735    0.000
   .bf06_43_1         4.565    0.025  183.655    0.000
   .bf06_48_1         1.378    0.027   51.299    0.000
   .bf06_53_1         4.632    0.022  207.973    0.000
   .bf06_58_1         1.775    0.034   52.825    0.000
    consc_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_03_t1        1.157    0.058   19.844    0.000
   .bf06_08_t1        0.637    0.033   19.365    0.000
   .bf06_13_t1        1.151    0.057   20.076    0.000
   .bf06_18_t1        0.463    0.024   18.963    0.000
   .bf06_23_t1        0.489    0.026   18.752    0.000
   .bf06_28_t1        0.723    0.039   18.580    0.000
   .bf06_33_t1        0.396    0.021   18.785    0.000
   .bf06_38_t1        0.278    0.016   17.526    0.000
   .bf06_43_t1        0.347    0.019   18.385    0.000
   .bf06_48_t1        0.435    0.023   18.877    0.000
   .bf06_53_t1        0.232    0.014   17.105    0.000
   .bf06_58_t1        0.711    0.037   19.097    0.000
    consc_ideal1      1.000                           
tidy(fit_cfa_consc_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 consc_ideal1 =~ bf06_28_t1 =~    lambda6     0.577    0.0355   0.562
 2 consc_ideal1 =~ bf06_58_t1 =~    lambda12    0.494    0.0344   0.505
 3 consc_ideal1 =~ bf06_23_t1 =~    lambda5     0.451    0.0290   0.542
 4 consc_ideal1 =~ bf06_38_t1 =~    lambda8    -0.445    0.0231  -0.645
 5 consc_ideal1 =~ bf06_03_t1 =~    lambda1     0.441    0.0422   0.379
 6 consc_ideal1 =~ bf06_53_t1 =~    lambda11   -0.433    0.0215  -0.668
 7 consc_ideal1 =~ bf06_43_t1 =~    lambda9    -0.419    0.0248  -0.580
 8 consc_ideal1 =~ bf06_48_t1 =~    lambda10    0.419    0.0272   0.536
 9 consc_ideal1 =~ bf06_18_t1 =~    lambda4    -0.417    0.0279  -0.522
10 consc_ideal1 =~ bf06_08_t1 =~    lambda2     0.412    0.0321   0.459
11 consc_ideal1 =~ bf06_33_t1 =~    lambda7    -0.403    0.0260  -0.539
12 consc_ideal1 =~ bf06_13_t1 =~    lambda3    -0.368    0.0416  -0.324

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf06_03_t1_r = bf06_03_t1,
         bf06_23_t1_r = bf06_23_t1,
         bf06_48_t1_r = bf06_48_t1,
         bf06_08_t1_r = bf06_08_t1,
         bf06_28_t1_r = bf06_28_t1,
         bf06_58_t1_r = bf06_58_t1,
         bf06_03_t2_r = bf06_03_t2,
         bf06_23_t2_r = bf06_23_t2,
         bf06_48_t2_r = bf06_48_t2,
         bf06_08_t2_r = bf06_08_t2,
         bf06_28_t2_r = bf06_28_t2,
         bf06_58_t2_r = bf06_58_t2,
         bf06_03_t3_r = bf06_03_t3,
         bf06_23_t3_r = bf06_23_t3,
         bf06_48_t3_r = bf06_48_t3,
         bf06_08_t3_r = bf06_08_t3,
         bf06_28_t3_r = bf06_28_t3,
         bf06_58_t3_r = bf06_58_t3) %>% 
  mutate(across(c(bf06_03_t1_r, bf06_23_t1_r, bf06_48_t1_r, bf06_08_t1_r, bf06_28_t1_r, bf06_58_t1_r,
                  bf06_03_t2_r, bf06_23_t2_r, bf06_48_t2_r, bf06_08_t2_r, bf06_28_t2_r, bf06_58_t2_r,
                  bf06_03_t3_r, bf06_23_t3_r, bf06_48_t3_r, bf06_08_t3_r, bf06_28_t3_r, bf06_58_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(consc_ideal_par1_t1 = rowMeans(across(c(bf06_28_t1_r, bf06_53_t1, bf06_18_t1, bf06_13_t1)), na.rm=T),
         consc_ideal_par2_t1 = rowMeans(across(c(bf06_58_t1_r, bf06_03_t1_r, bf06_48_t1_r, bf06_33_t1)), na.rm=T),
         consc_ideal_par3_t1 = rowMeans(across(c(bf06_23_t1_r, bf06_38_t1, bf06_43_t1, bf06_08_t1_r)), na.rm=T),
         consc_ideal_par1_t2 = rowMeans(across(c(bf06_28_t2_r, bf06_53_t2, bf06_18_t2, bf06_13_t2)), na.rm=T),
         consc_ideal_par2_t2 = rowMeans(across(c(bf06_58_t2_r, bf06_03_t2_r, bf06_48_t2_r, bf06_33_t2)), na.rm=T),
         consc_ideal_par3_t2 = rowMeans(across(c(bf06_23_t2_r, bf06_38_t2, bf06_43_t2, bf06_08_t2_r)), na.rm=T),
         consc_ideal_par1_t3 = rowMeans(across(c(bf06_28_t3_r, bf06_53_t3, bf06_18_t3, bf06_13_t3)), na.rm=T),
         consc_ideal_par2_t3 = rowMeans(across(c(bf06_58_t3_r, bf06_03_t3_r, bf06_48_t3_r, bf06_33_t3)), na.rm=T),
         consc_ideal_par3_t3 = rowMeans(across(c(bf06_23_t3_r, bf06_38_t3, bf06_43_t3, bf06_08_t3_r)), na.rm=T))

3.2.7 Neuroticism - current self

Check CFA item loadings at T1

cfa_neuro_curr <- '
#| warning: false

# Define the latent factors
neuro_curr1 =~ NA*bf05_04_t1 + lambda1*bf05_04_t1 + lambda2*bf05_09_t1 + lambda3*bf05_14_t1 + lambda4*bf05_19_t1 + lambda5*bf05_24_t1 + lambda6*bf05_29_t1 + lambda7*bf05_34_t1 + lambda8*bf05_39_t1 + lambda9*bf05_44_t1 + lambda10*bf05_49_t1 + lambda11*bf05_54_t1 + lambda12*bf05_59_t1

# Intercepts
bf05_04_t1 ~ i1*1
bf05_09_t1 ~ 1
bf05_14_t1 ~ 1
bf05_19_t1 ~ 1
bf05_24_t1 ~ 1
bf05_29_t1 ~ 1
bf05_34_t1 ~ 1
bf05_39_t1 ~ 1
bf05_44_t1 ~ 1
bf05_49_t1 ~ 1
bf05_54_t1 ~ 1
bf05_59_t1 ~ 1

# Unique Variances
bf05_04_t1 ~~ bf05_04_t1
bf05_09_t1 ~~ bf05_09_t1
bf05_14_t1 ~~ bf05_14_t1
bf05_19_t1 ~~ bf05_19_t1
bf05_24_t1 ~~ bf05_24_t1
bf05_29_t1 ~~ bf05_29_t1
bf05_34_t1 ~~ bf05_34_t1
bf05_39_t1 ~~ bf05_39_t1
bf05_44_t1 ~~ bf05_44_t1
bf05_49_t1 ~~ bf05_49_t1
bf05_54_t1 ~~ bf05_54_t1
bf05_59_t1 ~~ bf05_59_t1

# Latent Variable Means
neuro_curr1 ~ 0*1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
'
fit_cfa_neuro_curr <- cfa(cfa_neuro_curr, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
Warning in lav_data_full(data = data, group = group, cluster = cluster, : lavaan WARNING: some cases are empty and will be ignored:
  611
summary(fit_cfa_neuro_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 35 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         4            

Model Test User Model:
                                                      
  Test statistic                               680.474
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              4495.728
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.859
  Tucker-Lewis Index (TLI)                       0.827
                                                      
  Robust Comparative Fit Index (CFI)             0.858
  Robust Tucker-Lewis Index (TLI)                0.827

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14759.163
  Loglikelihood unrestricted model (H1)     -14418.926
                                                      
  Akaike (AIC)                               29590.325
  Bayesian (BIC)                             29761.069
  Sample-size adjusted Bayesian (SABIC)      29646.744

Root Mean Square Error of Approximation:

  RMSEA                                          0.117
  90 Percent confidence interval - lower         0.109
  90 Percent confidence interval - upper         0.125
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.117
  90 Percent confidence interval - lower         0.109
  90 Percent confidence interval - upper         0.125
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.055

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  neuro_curr1 =~                                      
    b05_04_ (lmb1)    0.904    0.041   22.165    0.000
    b05_09_ (lmb2)    0.758    0.039   19.533    0.000
    b05_14_ (lmb3)   -0.901    0.042  -21.239    0.000
    b05_19_ (lmb4)   -0.624    0.035  -17.726    0.000
    b05_24_ (lmb5)    0.755    0.040   18.667    0.000
    b05_29_ (lmb6)    0.906    0.038   23.588    0.000
    b05_34_ (lmb7)   -0.806    0.037  -22.003    0.000
    b05_39_ (lmb8)   -0.921    0.040  -23.031    0.000
    b05_44_ (lmb9)    0.806    0.039   20.762    0.000
    b05_49_ (lm10)    0.623    0.041   15.315    0.000
    b05_54_ (lm11)   -0.996    0.043  -23.246    0.000
    b05_59_ (lm12)   -0.814    0.042  -19.249    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_04_1 (i1)    2.755    0.045   61.511    0.000
   .bf05_09_1         2.933    0.041   70.774    0.000
   .bf05_14_1         3.152    0.046   68.350    0.000
   .bf05_19_1         3.588    0.037   97.236    0.000
   .bf05_24_1         3.017    0.043   70.486    0.000
   .bf05_29_1         2.977    0.043   69.428    0.000
   .bf05_34_1         3.879    0.040   96.548    0.000
   .bf05_39_1         3.303    0.044   74.777    0.000
   .bf05_44_1         3.210    0.042   76.710    0.000
   .bf05_49_1         2.342    0.042   56.155    0.000
   .bf05_54_1         3.249    0.047   68.523    0.000
   .bf05_59_1         3.128    0.045   69.737    0.000
    neur_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_04_t1        0.882    0.048   18.423    0.000
   .bf05_09_t1        0.880    0.046   19.093    0.000
   .bf05_14_t1        0.992    0.053   18.707    0.000
   .bf05_19_t1        0.765    0.039   19.447    0.000
   .bf05_24_t1        0.982    0.051   19.257    0.000
   .bf05_29_t1        0.736    0.041   17.947    0.000
   .bf05_34_t1        0.719    0.039   18.497    0.000
   .bf05_39_t1        0.806    0.045   17.863    0.000
   .bf05_44_t1        0.834    0.045   18.629    0.000
   .bf05_49_t1        1.084    0.055   19.757    0.000
   .bf05_54_t1        0.915    0.052   17.759    0.000
   .bf05_59_t1        1.042    0.055   18.985    0.000
    neuro_curr1       1.000                           
tidy(fit_cfa_neuro_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 neuro_curr1 =~ bf05_54_t1 =~    lambda11   -0.996    0.0428  -0.721
 2 neuro_curr1 =~ bf05_39_t1 =~    lambda8    -0.921    0.0400  -0.716
 3 neuro_curr1 =~ bf05_29_t1 =~    lambda6     0.906    0.0384   0.726
 4 neuro_curr1 =~ bf05_04_t1 =~    lambda1     0.904    0.0408   0.693
 5 neuro_curr1 =~ bf05_14_t1 =~    lambda3    -0.901    0.0424  -0.671
 6 neuro_curr1 =~ bf05_59_t1 =~    lambda12   -0.814    0.0423  -0.624
 7 neuro_curr1 =~ bf05_34_t1 =~    lambda7    -0.806    0.0366  -0.689
 8 neuro_curr1 =~ bf05_44_t1 =~    lambda9     0.806    0.0388   0.662
 9 neuro_curr1 =~ bf05_09_t1 =~    lambda2     0.758    0.0388   0.628
10 neuro_curr1 =~ bf05_24_t1 =~    lambda5     0.755    0.0405   0.606
11 neuro_curr1 =~ bf05_19_t1 =~    lambda4    -0.624    0.0352  -0.581
12 neuro_curr1 =~ bf05_49_t1 =~    lambda10    0.623    0.0407   0.514

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf05_29_t1_r = bf05_29_t1,
         bf05_04_t1_r = bf05_04_t1,
         bf05_24_t1_r = bf05_24_t1,
         bf05_44_t1_r = bf05_44_t1,
         bf05_09_t1_r = bf05_09_t1,
         bf05_49_t1_r = bf05_49_t1,
         bf05_29_t2_r = bf05_29_t2,
         bf05_04_t2_r = bf05_04_t2,
         bf05_24_t2_r = bf05_24_t2,
         bf05_44_t2_r = bf05_44_t2,
         bf05_09_t2_r = bf05_09_t2,
         bf05_49_t2_r = bf05_49_t2,
         bf05_29_t3_r = bf05_29_t3,
         bf05_04_t3_r = bf05_04_t3,
         bf05_24_t3_r = bf05_24_t3,
         bf05_44_t3_r = bf05_44_t3,
         bf05_09_t3_r = bf05_09_t3,
         bf05_49_t3_r = bf05_49_t3) %>% 
  mutate(across(c(bf05_29_t1_r, bf05_04_t1_r, bf05_24_t1_r, bf05_44_t1_r, bf05_09_t1_r, bf05_49_t1_r, 
                  bf05_29_t2_r, bf05_04_t2_r, bf05_24_t2_r, bf05_44_t2_r, bf05_09_t2_r, bf05_49_t2_r, 
                  bf05_29_t3_r, bf05_04_t3_r, bf05_24_t3_r, bf05_44_t3_r, bf05_09_t3_r, bf05_49_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(neuro_curr_par1_t1 = rowMeans(across(c(bf05_54_t1, bf05_59_t1, bf05_09_t1_r, bf05_49_t1_r)), na.rm=T),
         neuro_curr_par2_t1 = rowMeans(across(c(bf05_39_t1, bf05_14_t1, bf05_44_t1_r, bf05_19_t1)), na.rm=T),
         neuro_curr_par3_t1 = rowMeans(across(c(bf05_29_t1_r, bf05_04_t1_r, bf05_34_t1, bf05_24_t1_r)), na.rm=T),
         neuro_curr_par1_t2 = rowMeans(across(c(bf05_54_t2, bf05_59_t2, bf05_09_t2_r, bf05_49_t2_r)), na.rm=T),
         neuro_curr_par2_t2 = rowMeans(across(c(bf05_39_t2, bf05_14_t2, bf05_44_t2_r, bf05_19_t2)), na.rm=T),
         neuro_curr_par3_t2 = rowMeans(across(c(bf05_29_t2_r, bf05_04_t2_r, bf05_34_t2, bf05_24_t2_r)), na.rm=T),
         neuro_curr_par1_t3 = rowMeans(across(c(bf05_54_t3, bf05_59_t3, bf05_09_t3_r, bf05_49_t3_r)), na.rm=T),
         neuro_curr_par2_t3 = rowMeans(across(c(bf05_39_t3, bf05_14_t3, bf05_44_t3_r, bf05_19_t3)), na.rm=T),
         neuro_curr_par3_t3 = rowMeans(across(c(bf05_29_t3_r, bf05_04_t3_r, bf05_34_t3, bf05_24_t3_r)), na.rm=T))

3.2.8 Neuroticism - ideal self

Check CFA item loadings at T1

cfa_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*bf06_04_t1 + lambda1*bf06_04_t1 + lambda2*bf06_09_t1 + lambda3*bf06_14_t1 + lambda4*bf06_19_t1 + lambda5*bf06_24_t1 + lambda6*bf06_29_t1 + lambda7*bf06_34_t1 + lambda8*bf06_39_t1 + lambda9*bf06_44_t1 + lambda10*bf06_49_t1 + lambda11*bf06_54_t1 + lambda12*bf06_59_t1

# Intercepts
bf06_04_t1 ~ i1*1
bf06_09_t1 ~ 1
bf06_14_t1 ~ 1
bf06_19_t1 ~ 1
bf06_24_t1 ~ 1
bf06_29_t1 ~ 1
bf06_34_t1 ~ 1
bf06_39_t1 ~ 1
bf06_44_t1 ~ 1
bf06_49_t1 ~ 1
bf06_54_t1 ~ 1
bf06_59_t1 ~ 1

# Unique Variances
bf06_04_t1 ~~ bf06_04_t1
bf06_09_t1 ~~ bf06_09_t1
bf06_14_t1 ~~ bf06_14_t1
bf06_19_t1 ~~ bf06_19_t1
bf06_24_t1 ~~ bf06_24_t1
bf06_29_t1 ~~ bf06_29_t1
bf06_34_t1 ~~ bf06_34_t1
bf06_39_t1 ~~ bf06_39_t1
bf06_44_t1 ~~ bf06_44_t1
bf06_49_t1 ~~ bf06_49_t1
bf06_54_t1 ~~ bf06_54_t1
bf06_59_t1 ~~ bf06_59_t1

# Latent Variable Means
neuro_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
'
fit_cfa_neuro_ideal <- cfa(cfa_neuro_ideal, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_neuro_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 41 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               273.694
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2229.774
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.898
  Tucker-Lewis Index (TLI)                       0.876
                                                      
  Robust Comparative Fit Index (CFI)             0.898
  Robust Tucker-Lewis Index (TLI)                0.876

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12149.997
  Loglikelihood unrestricted model (H1)     -12013.150
                                                      
  Akaike (AIC)                               24371.994
  Bayesian (BIC)                             24542.738
  Sample-size adjusted Bayesian (SABIC)      24428.413

Root Mean Square Error of Approximation:

  RMSEA                                          0.069
  90 Percent confidence interval - lower         0.061
  90 Percent confidence interval - upper         0.078
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.016
                                                      
  Robust RMSEA                                   0.069
  90 Percent confidence interval - lower         0.061
  90 Percent confidence interval - upper         0.078
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.017

Standardized Root Mean Square Residual:

  SRMR                                           0.042

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  neuro_ideal1 =~                                     
    b06_04_ (lmb1)    0.311    0.027   11.743    0.000
    b06_09_ (lmb2)    0.430    0.026   16.554    0.000
    b06_14_ (lmb3)   -0.492    0.028  -17.268    0.000
    b06_19_ (lmb4)   -0.525    0.032  -16.181    0.000
    b06_24_ (lmb5)    0.355    0.025   14.392    0.000
    b06_29_ (lmb6)    0.409    0.039   10.403    0.000
    b06_34_ (lmb7)   -0.548    0.032  -16.987    0.000
    b06_39_ (lmb8)   -0.524    0.027  -19.366    0.000
    b06_44_ (lmb9)    0.462    0.027   16.874    0.000
    b06_49_ (lm10)    0.321    0.051    6.247    0.000
    b06_54_ (lm11)   -0.533    0.026  -20.319    0.000
    b06_59_ (lm12)   -0.479    0.035  -13.698    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_04_1 (i1)    4.549    0.025  178.914    0.000
   .bf06_09_1         4.441    0.026  170.833    0.000
   .bf06_14_1         1.609    0.029   56.032    0.000
   .bf06_19_1         1.985    0.032   61.253    0.000
   .bf06_24_1         4.664    0.024  193.333    0.000
   .bf06_29_1         4.251    0.037  114.255    0.000
   .bf06_34_1         1.816    0.032   55.945    0.000
   .bf06_39_1         1.565    0.028   56.296    0.000
   .bf06_44_1         4.425    0.027  161.125    0.000
   .bf06_49_1         3.816    0.048   80.268    0.000
   .bf06_54_1         1.468    0.027   53.906    0.000
   .bf06_59_1         1.903    0.034   56.042    0.000
    neuro_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_04_t1        0.451    0.023   19.693    0.000
   .bf06_09_t1        0.387    0.021   18.568    0.000
   .bf06_14_t1        0.455    0.025   18.321    0.000
   .bf06_19_t1        0.612    0.033   18.691    0.000
   .bf06_24_t1        0.366    0.019   19.077    0.000
   .bf06_29_t1        1.005    0.051   19.860    0.000
   .bf06_34_t1        0.591    0.032   18.447    0.000
   .bf06_39_t1        0.379    0.022   17.415    0.000
   .bf06_44_t1        0.425    0.023   18.437    0.000
   .bf06_49_t1        1.811    0.089   20.344    0.000
   .bf06_54_t1        0.344    0.020   17.009    0.000
   .bf06_59_t1        0.747    0.039   19.249    0.000
    neuro_ideal1      1.000                           
tidy(fit_cfa_neuro_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 neuro_ideal1 =~ bf06_34_t1 =~    lambda7    -0.548    0.0323  -0.581
 2 neuro_ideal1 =~ bf06_54_t1 =~    lambda11   -0.533    0.0262  -0.672
 3 neuro_ideal1 =~ bf06_19_t1 =~    lambda4    -0.525    0.0325  -0.558
 4 neuro_ideal1 =~ bf06_39_t1 =~    lambda8    -0.524    0.0271  -0.648
 5 neuro_ideal1 =~ bf06_14_t1 =~    lambda3    -0.492    0.0285  -0.589
 6 neuro_ideal1 =~ bf06_59_t1 =~    lambda12   -0.479    0.0349  -0.484
 7 neuro_ideal1 =~ bf06_44_t1 =~    lambda9     0.462    0.0274   0.579
 8 neuro_ideal1 =~ bf06_09_t1 =~    lambda2     0.430    0.0260   0.569
 9 neuro_ideal1 =~ bf06_29_t1 =~    lambda6     0.409    0.0393   0.378
10 neuro_ideal1 =~ bf06_24_t1 =~    lambda5     0.355    0.0247   0.506
11 neuro_ideal1 =~ bf06_49_t1 =~    lambda10    0.321    0.0513   0.232
12 neuro_ideal1 =~ bf06_04_t1 =~    lambda1     0.311    0.0265   0.421

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf06_29_t1_r = bf06_29_t1,
         bf06_04_t1_r = bf06_04_t1,
         bf06_24_t1_r = bf06_24_t1,
         bf06_44_t1_r = bf06_44_t1,
         bf06_09_t1_r = bf06_09_t1,
         bf06_49_t1_r = bf06_49_t1,
         bf06_29_t2_r = bf06_29_t2,
         bf06_04_t2_r = bf06_04_t2,
         bf06_24_t2_r = bf06_24_t2,
         bf06_44_t2_r = bf06_44_t2,
         bf06_09_t2_r = bf06_09_t2,
         bf06_49_t2_r = bf06_49_t2,
         bf06_29_t3_r = bf06_29_t3,
         bf06_04_t3_r = bf06_04_t3,
         bf06_24_t3_r = bf06_24_t3,
         bf06_44_t3_r = bf06_44_t3,
         bf06_09_t3_r = bf06_09_t3,
         bf06_49_t3_r = bf06_49_t3) %>% 
  mutate(across(c(bf06_29_t1_r, bf06_04_t1_r, bf06_24_t1_r, bf06_44_t1_r, bf06_09_t1_r, bf06_49_t1_r, 
                  bf06_29_t2_r, bf06_04_t2_r, bf06_24_t2_r, bf06_44_t2_r, bf06_09_t2_r, bf06_49_t2_r, 
                  bf06_29_t3_r, bf06_04_t3_r, bf06_24_t3_r, bf06_44_t3_r, bf06_09_t3_r, bf06_49_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(neuro_ideal_par1_t1 = rowMeans(across(c(bf06_34_t1, bf06_59_t1, bf06_29_t1_r, bf06_04_t1_r)), na.rm=T),
         neuro_ideal_par2_t1 = rowMeans(across(c(bf06_54_t1, bf06_14_t1, bf06_09_t1_r, bf06_49_t1_r)), na.rm=T),
         neuro_ideal_par3_t1 = rowMeans(across(c(bf06_19_t1, bf06_39_t1, bf06_44_t1_r, bf06_24_t1_r)), na.rm=T),
         neuro_ideal_par1_t2 = rowMeans(across(c(bf06_34_t2, bf06_59_t2, bf06_29_t2_r, bf06_04_t2_r)), na.rm=T),
         neuro_ideal_par2_t2 = rowMeans(across(c(bf06_54_t2, bf06_14_t2, bf06_09_t2_r, bf06_49_t2_r)), na.rm=T),
         neuro_ideal_par3_t2 = rowMeans(across(c(bf06_19_t2, bf06_39_t2, bf06_44_t2_r, bf06_24_t2_r)), na.rm=T),
         neuro_ideal_par1_t3 = rowMeans(across(c(bf06_34_t3, bf06_59_t3, bf06_29_t3_r, bf06_04_t3_r)), na.rm=T),
         neuro_ideal_par2_t3 = rowMeans(across(c(bf06_54_t3, bf06_14_t3, bf06_09_t3_r, bf06_49_t3_r)), na.rm=T),
         neuro_ideal_par3_t3 = rowMeans(across(c(bf06_19_t3, bf06_39_t3, bf06_44_t3_r, bf06_24_t3_r)), na.rm=T))

3.2.9 Openness - current self

Check CFA item loadings at T1

cfa_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*bf05_05_t1 + lambda1*bf05_05_t1 + lambda2*bf05_10_t1 + lambda3*bf05_15_t1 + lambda4*bf05_20_t1 + lambda5*bf05_25_t1 + lambda6*bf05_30_t1 + lambda7*bf05_35_t1 + lambda8*bf05_40_t1 + lambda9*bf05_45_t1 + lambda10*bf05_50_t1 + lambda11*bf05_55_t1 + lambda12*bf05_60_t1

# Intercepts
bf05_05_t1 ~ i1*1
bf05_10_t1 ~ 1
bf05_15_t1 ~ 1
bf05_20_t1 ~ 1
bf05_25_t1 ~ 1
bf05_30_t1 ~ 1
bf05_35_t1 ~ 1
bf05_40_t1 ~ 1
bf05_45_t1 ~ 1
bf05_50_t1 ~ 1
bf05_55_t1 ~ 1
bf05_60_t1 ~ 1

# Unique Variances
bf05_05_t1 ~~ bf05_05_t1
bf05_10_t1 ~~ bf05_10_t1
bf05_15_t1 ~~ bf05_15_t1
bf05_20_t1 ~~ bf05_20_t1
bf05_25_t1 ~~ bf05_25_t1
bf05_30_t1 ~~ bf05_30_t1
bf05_35_t1 ~~ bf05_35_t1
bf05_40_t1 ~~ bf05_40_t1
bf05_45_t1 ~~ bf05_45_t1
bf05_50_t1 ~~ bf05_50_t1
bf05_55_t1 ~~ bf05_55_t1
bf05_60_t1 ~~ bf05_60_t1

# Latent Variable Means
openn_curr1 ~ 0*1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
'
fit_cfa_openn_curr <- cfa(cfa_openn_curr, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_openn_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 37 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                               686.354
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2445.809
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.734
  Tucker-Lewis Index (TLI)                       0.675
                                                      
  Robust Comparative Fit Index (CFI)             0.734
  Robust Tucker-Lewis Index (TLI)                0.675

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14957.504
  Loglikelihood unrestricted model (H1)     -14614.327
                                                      
  Akaike (AIC)                               29987.007
  Bayesian (BIC)                             30157.751
  Sample-size adjusted Bayesian (SABIC)      30043.426

Root Mean Square Error of Approximation:

  RMSEA                                          0.118
  90 Percent confidence interval - lower         0.110
  90 Percent confidence interval - upper         0.125
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.118
  90 Percent confidence interval - lower         0.110
  90 Percent confidence interval - upper         0.126
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.071

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  openn_curr1 =~                                      
    b05_05_ (lmb1)    0.291    0.050    5.788    0.000
    b05_10_ (lmb2)   -0.455    0.033  -13.723    0.000
    b05_15_ (lmb3)   -0.517    0.038  -13.574    0.000
    b05_20_ (lmb4)   -0.756    0.042  -18.203    0.000
    b05_25_ (lmb5)    0.565    0.046   12.321    0.000
    b05_30_ (lmb6)    0.622    0.044   14.134    0.000
    b05_35_ (lmb7)   -0.688    0.037  -18.439    0.000
    b05_40_ (lmb8)   -0.546    0.036  -15.159    0.000
    b05_45_ (lmb9)    0.562    0.042   13.394    0.000
    b05_50_ (lm10)    0.700    0.048   14.469    0.000
    b05_55_ (lm11)    0.623    0.044   14.239    0.000
    b05_60_ (lm12)   -0.597    0.038  -15.746    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_05_1 (i1)    2.927    0.046   63.757    0.000
   .bf05_10_1         4.107    0.032  128.627    0.000
   .bf05_15_1         3.642    0.036  101.863    0.000
   .bf05_20_1         3.862    0.040   95.629    0.000
   .bf05_25_1         2.363    0.043   54.499    0.000
   .bf05_30_1         2.473    0.042   58.767    0.000
   .bf05_35_1         3.999    0.036  109.961    0.000
   .bf05_40_1         3.968    0.035  113.040    0.000
   .bf05_45_1         2.099    0.040   52.442    0.000
   .bf05_50_1         2.399    0.046   51.800    0.000
   .bf05_55_1         2.435    0.042   57.439    0.000
   .bf05_60_1         3.539    0.037   96.935    0.000
    opnn_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_05_t1        1.703    0.084   20.359    0.000
   .bf05_10_t1        0.658    0.034   19.091    0.000
   .bf05_15_t1        0.817    0.044   18.616    0.000
   .bf05_20_t1        0.811    0.050   16.084    0.000
   .bf05_25_t1        1.276    0.066   19.321    0.000
   .bf05_30_t1        1.114    0.059   18.722    0.000
   .bf05_35_t1        0.647    0.041   15.919    0.000
   .bf05_40_t1        0.747    0.040   18.676    0.000
   .bf05_45_t1        1.041    0.055   19.015    0.000
   .bf05_50_t1        1.326    0.072   18.546    0.000
   .bf05_55_t1        1.134    0.060   18.955    0.000
   .bf05_60_t1        0.773    0.043   17.908    0.000
    openn_curr1       1.000                           
tidy(fit_cfa_openn_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 openn_curr1 =~ bf05_20_t1 =~    lambda4    -0.756    0.0416  -0.643
 2 openn_curr1 =~ bf05_50_t1 =~    lambda10    0.700    0.0484   0.520
 3 openn_curr1 =~ bf05_35_t1 =~    lambda7    -0.688    0.0373  -0.650
 4 openn_curr1 =~ bf05_55_t1 =~    lambda11    0.623    0.0438   0.505
 5 openn_curr1 =~ bf05_30_t1 =~    lambda6     0.622    0.0440   0.508
 6 openn_curr1 =~ bf05_60_t1 =~    lambda12   -0.597    0.0379  -0.562
 7 openn_curr1 =~ bf05_25_t1 =~    lambda5     0.565    0.0458   0.447
 8 openn_curr1 =~ bf05_45_t1 =~    lambda9     0.562    0.0420   0.483
 9 openn_curr1 =~ bf05_40_t1 =~    lambda8    -0.546    0.0360  -0.534
10 openn_curr1 =~ bf05_15_t1 =~    lambda3    -0.517    0.0381  -0.496
11 openn_curr1 =~ bf05_10_t1 =~    lambda2    -0.455    0.0332  -0.489
12 openn_curr1 =~ bf05_05_t1 =~    lambda1     0.291    0.0502   0.217

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf05_50_t1_r = bf05_50_t1,
         bf05_55_t1_r = bf05_55_t1,
         bf05_30_t1_r = bf05_30_t1,
         bf05_25_t1_r = bf05_25_t1,
         bf05_45_t1_r = bf05_45_t1,
         bf05_05_t1_r = bf05_05_t1,
         bf05_50_t2_r = bf05_50_t2,
         bf05_55_t2_r = bf05_55_t2,
         bf05_30_t2_r = bf05_30_t2,
         bf05_25_t2_r = bf05_25_t2,
         bf05_45_t2_r = bf05_45_t2,
         bf05_05_t2_r = bf05_05_t2,
         bf05_50_t3_r = bf05_50_t3,
         bf05_55_t3_r = bf05_55_t3,
         bf05_30_t3_r = bf05_30_t3,
         bf05_25_t3_r = bf05_25_t3,
         bf05_45_t3_r = bf05_45_t3,
         bf05_05_t3_r = bf05_05_t3) %>% 
  mutate(across(c(bf05_50_t1_r, bf05_55_t1_r, bf05_30_t1_r, bf05_25_t1_r, bf05_45_t1_r, bf05_05_t1_r,
                  bf05_50_t2_r, bf05_55_t2_r, bf05_30_t2_r, bf05_25_t2_r, bf05_45_t2_r, bf05_05_t2_r,
                  bf05_50_t3_r, bf05_55_t3_r, bf05_30_t3_r, bf05_25_t3_r, bf05_45_t3_r, bf05_05_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(openn_curr_par1_t1 = rowMeans(across(c(bf05_20_t1, bf05_60_t1, bf05_25_t1_r, bf05_05_t1_r)), na.rm=T),
         openn_curr_par2_t1 = rowMeans(across(c(bf05_50_t1_r, bf05_30_t1_r, bf05_45_t1_r, bf05_10_t1)), na.rm=T),
         openn_curr_par3_t1 = rowMeans(across(c(bf05_35_t1, bf05_55_t1_r, bf05_40_t1, bf05_15_t1)), na.rm=T),
         openn_curr_par1_t2 = rowMeans(across(c(bf05_20_t2, bf05_60_t2, bf05_25_t2_r, bf05_05_t2_r)), na.rm=T),
         openn_curr_par2_t2 = rowMeans(across(c(bf05_50_t2_r, bf05_30_t2_r, bf05_45_t2_r, bf05_10_t2)), na.rm=T),
         openn_curr_par3_t2 = rowMeans(across(c(bf05_35_t2, bf05_55_t2_r, bf05_40_t2, bf05_15_t2)), na.rm=T),
         openn_curr_par1_t3 = rowMeans(across(c(bf05_20_t3, bf05_60_t3, bf05_25_t3_r, bf05_05_t3_r)), na.rm=T),
         openn_curr_par2_t3 = rowMeans(across(c(bf05_50_t3_r, bf05_30_t3_r, bf05_45_t3_r, bf05_10_t3)), na.rm=T),
         openn_curr_par3_t3 = rowMeans(across(c(bf05_35_t3, bf05_55_t3_r, bf05_40_t3, bf05_15_t3)), na.rm=T))

3.2.10 Openness - ideal self

Check CFA item loadings at T1

cfa_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*bf06_05_t1 + lambda1*bf06_05_t1 + lambda2*bf06_10_t1 + lambda3*bf06_15_t1 + lambda4*bf06_20_t1 + lambda5*bf06_25_t1 + lambda6*bf06_30_t1 + lambda7*bf06_35_t1 + lambda8*bf06_40_t1 + lambda9*bf06_45_t1 + lambda10*bf06_50_t1 + lambda11*bf06_55_t1 + lambda12*bf06_60_t1

# Intercepts
bf06_05_t1 ~ i1*1
bf06_10_t1 ~ 1
bf06_15_t1 ~ 1
bf06_20_t1 ~ 1
bf06_25_t1 ~ 1
bf06_30_t1 ~ 1
bf06_35_t1 ~ 1
bf06_40_t1 ~ 1
bf06_45_t1 ~ 1
bf06_50_t1 ~ 1
bf06_55_t1 ~ 1
bf06_60_t1 ~ 1

# Unique Variances
bf06_05_t1 ~~ bf06_05_t1
bf06_10_t1 ~~ bf06_10_t1
bf06_15_t1 ~~ bf06_15_t1
bf06_20_t1 ~~ bf06_20_t1
bf06_25_t1 ~~ bf06_25_t1
bf06_30_t1 ~~ bf06_30_t1
bf06_35_t1 ~~ bf06_35_t1
bf06_40_t1 ~~ bf06_40_t1
bf06_45_t1 ~~ bf06_45_t1
bf06_50_t1 ~~ bf06_50_t1
bf06_55_t1 ~~ bf06_55_t1
bf06_60_t1 ~~ bf06_60_t1

# Latent Variable Means
openn_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
'
fit_cfa_openn_ideal <- cfa(cfa_openn_ideal, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_openn_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 43 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           847         849
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               460.240
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2053.128
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.796
  Tucker-Lewis Index (TLI)                       0.750
                                                      
  Robust Comparative Fit Index (CFI)             0.796
  Robust Tucker-Lewis Index (TLI)                0.751

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -13794.655
  Loglikelihood unrestricted model (H1)     -13564.536
                                                      
  Akaike (AIC)                               27661.311
  Bayesian (BIC)                             27832.012
  Sample-size adjusted Bayesian (SABIC)      27717.687

Root Mean Square Error of Approximation:

  RMSEA                                          0.094
  90 Percent confidence interval - lower         0.086
  90 Percent confidence interval - upper         0.102
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.998
                                                      
  Robust RMSEA                                   0.095
  90 Percent confidence interval - lower         0.087
  90 Percent confidence interval - upper         0.103
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.999

Standardized Root Mean Square Residual:

  SRMR                                           0.062

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  openn_ideal1 =~                                     
    b06_05_ (lmb1)    0.255    0.057    4.476    0.000
    b06_10_ (lmb2)   -0.418    0.027  -15.710    0.000
    b06_15_ (lmb3)   -0.383    0.025  -15.319    0.000
    b06_20_ (lmb4)   -0.548    0.033  -16.798    0.000
    b06_25_ (lmb5)    0.537    0.039   13.632    0.000
    b06_30_ (lmb6)    0.559    0.052   10.808    0.000
    b06_35_ (lmb7)   -0.545    0.034  -16.236    0.000
    b06_40_ (lmb8)   -0.511    0.042  -12.236    0.000
    b06_45_ (lmb9)    0.525    0.038   13.904    0.000
    b06_50_ (lm10)    0.590    0.041   14.308    0.000
    b06_55_ (lm11)    0.554    0.045   12.323    0.000
    b06_60_ (lm12)   -0.456    0.027  -17.166    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_05_1 (i1)    3.020    0.051   59.265    0.000
   .bf06_10_1         4.492    0.026  173.867    0.000
   .bf06_15_1         4.595    0.024  191.631    0.000
   .bf06_20_1         4.331    0.032  137.244    0.000
   .bf06_25_1         1.823    0.037   48.684    0.000
   .bf06_30_1         2.012    0.048   42.001    0.000
   .bf06_35_1         4.296    0.032  133.053    0.000
   .bf06_40_1         3.899    0.039   99.042    0.000
   .bf06_45_1         1.639    0.036   45.721    0.000
   .bf06_50_1         1.996    0.039   50.743    0.000
   .bf06_55_1         2.159    0.042   51.370    0.000
   .bf06_60_1         4.528    0.026  174.121    0.000
    openn_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_05_t1        2.129    0.104   20.396    0.000
   .bf06_10_t1        0.389    0.021   18.294    0.000
   .bf06_15_t1        0.340    0.019   18.225    0.000
   .bf06_20_t1        0.541    0.031   17.325    0.000
   .bf06_25_t1        0.897    0.047   18.909    0.000
   .bf06_30_t1        1.630    0.083   19.553    0.000
   .bf06_35_t1        0.583    0.033   17.571    0.000
   .bf06_40_t1        1.049    0.054   19.317    0.000
   .bf06_45_t1        0.812    0.043   18.754    0.000
   .bf06_50_t1        0.961    0.052   18.632    0.000
   .bf06_55_t1        1.188    0.062   19.162    0.000
   .bf06_60_t1        0.365    0.021   17.350    0.000
    openn_ideal1      1.000                           
tidy(fit_cfa_openn_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 openn_ideal1 =~ bf06_50_t1 =~    lambda10    0.590    0.0412   0.516
 2 openn_ideal1 =~ bf06_30_t1 =~    lambda6     0.559    0.0517   0.401
 3 openn_ideal1 =~ bf06_55_t1 =~    lambda11    0.554    0.0449   0.453
 4 openn_ideal1 =~ bf06_20_t1 =~    lambda4    -0.548    0.0326  -0.598
 5 openn_ideal1 =~ bf06_35_t1 =~    lambda7    -0.545    0.0336  -0.581
 6 openn_ideal1 =~ bf06_25_t1 =~    lambda5     0.537    0.0394   0.493
 7 openn_ideal1 =~ bf06_45_t1 =~    lambda9     0.525    0.0377   0.503
 8 openn_ideal1 =~ bf06_40_t1 =~    lambda8    -0.511    0.0418  -0.447
 9 openn_ideal1 =~ bf06_60_t1 =~    lambda12   -0.456    0.0266  -0.603
10 openn_ideal1 =~ bf06_10_t1 =~    lambda2    -0.418    0.0266  -0.556
11 openn_ideal1 =~ bf06_15_t1 =~    lambda3    -0.383    0.0250  -0.549
12 openn_ideal1 =~ bf06_05_t1 =~    lambda1     0.255    0.0569   0.172

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf06_50_t1_r = bf06_50_t1,
         bf06_55_t1_r = bf06_55_t1,
         bf06_30_t1_r = bf06_30_t1,
         bf06_25_t1_r = bf06_25_t1,
         bf06_45_t1_r = bf06_45_t1,
         bf06_05_t1_r = bf06_05_t1,
         bf06_50_t2_r = bf06_50_t2,
         bf06_55_t2_r = bf06_55_t2,
         bf06_30_t2_r = bf06_30_t2,
         bf06_25_t2_r = bf06_25_t2,
         bf06_45_t2_r = bf06_45_t2,
         bf06_05_t2_r = bf06_05_t2,
         bf06_50_t3_r = bf06_50_t3,
         bf06_55_t3_r = bf06_55_t3,
         bf06_30_t3_r = bf06_30_t3,
         bf06_25_t3_r = bf06_25_t3,
         bf06_45_t3_r = bf06_45_t3,
         bf06_05_t3_r = bf06_05_t3) %>% 
  mutate(across(c(bf06_50_t1_r, bf06_55_t1_r, bf06_30_t1_r, bf06_25_t1_r, bf06_45_t1_r, bf06_05_t1_r,
                  bf06_50_t2_r, bf06_55_t2_r, bf06_30_t2_r, bf06_25_t2_r, bf06_45_t2_r, bf06_05_t2_r,
                  bf06_50_t3_r, bf06_55_t3_r, bf06_30_t3_r, bf06_25_t3_r, bf06_45_t3_r, bf06_05_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(openn_ideal_par1_t1 = rowMeans(across(c(bf06_50_t1_r, bf06_25_t1_r, bf06_60_t1, bf06_05_t1)), na.rm=T),
         openn_ideal_par2_t1 = rowMeans(across(c(bf06_30_t1_r, bf06_35_t1, bf06_40_t1, bf06_15_t1)), na.rm=T),
         openn_ideal_par3_t1 = rowMeans(across(c(bf06_55_t1_r, bf06_20_t1, bf06_45_t1_r, bf06_10_t1)), na.rm=T),
         openn_ideal_par1_t2 = rowMeans(across(c(bf06_50_t2_r, bf06_25_t2_r, bf06_60_t2, bf06_05_t2)), na.rm=T),
         openn_ideal_par2_t2 = rowMeans(across(c(bf06_30_t2_r, bf06_35_t2, bf06_40_t2, bf06_15_t2)), na.rm=T),
         openn_ideal_par3_t2 = rowMeans(across(c(bf06_55_t2_r, bf06_20_t2, bf06_45_t2_r, bf06_10_t2)), na.rm=T),
         openn_ideal_par1_t3 = rowMeans(across(c(bf06_50_t3_r, bf06_25_t3_r, bf06_60_t3, bf06_05_t3)), na.rm=T),
         openn_ideal_par2_t3 = rowMeans(across(c(bf06_30_t3_r, bf06_35_t3, bf06_40_t3, bf06_15_t3)), na.rm=T),
         openn_ideal_par3_t3 = rowMeans(across(c(bf06_55_t3_r, bf06_20_t3, bf06_45_t3_r, bf06_10_t3)), na.rm=T))

# replace NaN with regular NA
df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
    mutate_all(~ifelse(is.nan(.), NA, .))

4 Measurement invariance

4.1 Well-being outcomes

Testing for measurement invariance of the latent traits across time. Only doing this for the two (original) intervention groups for now, not for the waitlist control group, because they had different intervention schedules and our main focus lies on testing changes in the intervention groups.

4.1.1 Life satisfaction

Satisfaction with life scale (only the first four items - last one taps into a somewhat different construct)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + sw06_02_t1 + sw06_03_t1 + sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + sw06_02_t2 + sw06_03_t2 + sw06_04_t2
swls3 =~ NA*sw06_01_t3 + lambda1*sw06_01_t3 + sw06_02_t3 + sw06_03_t3 + sw06_04_t3

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ 1
sw06_03_t1 ~ 1
sw06_04_t1 ~ 1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ 1
sw06_03_t2 ~ 1
sw06_04_t2 ~ 1

sw06_01_t3 ~ i1*1
sw06_02_t3 ~ 1
sw06_03_t3 ~ 1
sw06_04_t3 ~ 1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

sw06_01_t3 ~~ sw06_01_t3
sw06_02_t3 ~~ sw06_02_t3
sw06_03_t3 ~~ sw06_03_t3
sw06_04_t3 ~~ sw06_04_t3

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1
swls3 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls3 ~~ swls3
swls1 ~~ swls2
swls1 ~~ swls3
swls2 ~~ swls3
'
fit_configural_swls <- cfa(configural_swls, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_swls, fit.measures = TRUE)

# Weak invariance model
weak_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2
swls3 =~ NA*sw06_01_t3 + lambda1*sw06_01_t3 + lambda2*sw06_02_t3 + lambda3*sw06_03_t3 + lambda4*sw06_04_t3

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ 1
sw06_03_t1 ~ 1
sw06_04_t1 ~ 1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ 1
sw06_03_t2 ~ 1
sw06_04_t2 ~ 1

sw06_01_t3 ~ i1*1
sw06_02_t3 ~ 1
sw06_03_t3 ~ 1
sw06_04_t3 ~ 1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

sw06_01_t3 ~~ sw06_01_t3
sw06_02_t3 ~~ sw06_02_t3
sw06_03_t3 ~~ sw06_03_t3
sw06_04_t3 ~~ sw06_04_t3

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1
swls3 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls3 ~~ swls3
swls1 ~~ swls2
swls1 ~~ swls3
swls2 ~~ swls3
'
fit_weak_swls <- cfa(weak_swls, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_swls, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2
swls3 =~ NA*sw06_01_t3 + lambda1*sw06_01_t3 + lambda2*sw06_02_t3 + lambda3*sw06_03_t3 + lambda4*sw06_04_t3

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ i2*1
sw06_03_t1 ~ i3*1
sw06_04_t1 ~ i4*1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ i2*1
sw06_03_t2 ~ i3*1
sw06_04_t2 ~ i4*1

sw06_01_t3 ~ i1*1
sw06_02_t3 ~ i2*1
sw06_03_t3 ~ i3*1
sw06_04_t3 ~ i4*1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

sw06_01_t3 ~~ sw06_01_t3
sw06_02_t3 ~~ sw06_02_t3
sw06_03_t3 ~~ sw06_03_t3
sw06_04_t3 ~~ sw06_04_t3

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1
swls3 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls3 ~~ swls3
swls1 ~~ swls2
swls1 ~~ swls3
swls2 ~~ swls3
'
fit_strong_swls <- cfa(strong_swls, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_swls, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2
swls3 =~ NA*sw06_01_t3 + lambda1*sw06_01_t3 + lambda2*sw06_02_t3 + lambda3*sw06_03_t3 + lambda4*sw06_04_t3

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ i2*1
sw06_03_t1 ~ i3*1
sw06_04_t1 ~ i4*1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ i2*1
sw06_03_t2 ~ i3*1
sw06_04_t2 ~ i4*1

sw06_01_t3 ~ i1*1
sw06_02_t3 ~ i2*1
sw06_03_t3 ~ i3*1
sw06_04_t3 ~ i4*1

# Unique Variances
sw06_01_t1 ~~ u1*sw06_01_t1
sw06_02_t1 ~~ u2*sw06_02_t1
sw06_03_t1 ~~ u3*sw06_03_t1
sw06_04_t1 ~~ u4*sw06_04_t1

sw06_01_t2 ~~ u1*sw06_01_t2
sw06_02_t2 ~~ u2*sw06_02_t2
sw06_03_t2 ~~ u3*sw06_03_t2
sw06_04_t2 ~~ u4*sw06_04_t2

sw06_01_t3 ~~ u1*sw06_01_t3
sw06_02_t3 ~~ u2*sw06_02_t3
sw06_03_t3 ~~ u3*sw06_03_t3
sw06_04_t3 ~~ u4*sw06_04_t3

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1
swls3 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls3 ~~ swls3
swls1 ~~ swls2
swls2 ~~ swls3
swls1 ~~ swls3
'
fit_strict_swls <- cfa(strict_swls, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_swls, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   848    39  678. 22384. 22569. 0.907 0.880 0.120 0.0468
2 weak         848    33  678. 22372. 22529. 0.908 0.893 0.113 0.0472
3 strong       848    27  688. 22370. 22498. 0.907 0.903 0.108 0.0485
4 strict       848    19  744. 22410. 22500. 0.900 0.907 0.106 0.0543
# chi-square difference test for nested models 
anova(fit_configural_swls, fit_weak_swls)

Chi-Squared Difference Test

                    Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_configural_swls 51 22384 22568 677.81                                    
fit_weak_swls       57 22372 22529 678.41    0.59442     0       6     0.9965
anova(fit_weak_swls, fit_strong_swls)

Chi-Squared Difference Test

                Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_weak_swls   57 22372 22529 678.41                                       
fit_strong_swls 63 22370 22498 687.90     9.4974 0.026218       6     0.1475
anova(fit_strong_swls, fit_strict_swls)

Chi-Squared Difference Test

                Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_strong_swls 63 22370 22498 687.90                                       
fit_strict_swls 71 22410 22500 743.84     55.932 0.084056       8  2.908e-09
                   
fit_strong_swls    
fit_strict_swls ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Model fit relatively similar across model specifications. Chi^2 tests indicate that strong measurement invariance is given.

4.1.2 Meaning in life

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + meaning_par2_t1 + meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + meaning_par2_t2 + meaning_par3_t2
meaning3 =~ NA*meaning_par1_t3 + lambda1*meaning_par1_t3 + meaning_par2_t3 + meaning_par3_t3

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ 1
meaning_par3_t1 ~ 1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ 1
meaning_par3_t2 ~ 1

meaning_par1_t3 ~ i1*1
meaning_par2_t3 ~ 1
meaning_par3_t3 ~ 1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

meaning_par1_t3 ~~ meaning_par1_t3
meaning_par2_t3 ~~ meaning_par2_t3
meaning_par3_t3 ~~ meaning_par3_t3

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1
meaning3 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning3 ~~ meaning3
meaning1 ~~ meaning2
meaning2 ~~ meaning3
meaning1 ~~ meaning3
'
fit_configural_meaning <- cfa(configural_meaning, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_meaning, fit.measures = TRUE)

# Weak invariance model
weak_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2
meaning3 =~ NA*meaning_par1_t3 + lambda1*meaning_par1_t3 + lambda2*meaning_par2_t3 + lambda3*meaning_par3_t3

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ 1
meaning_par3_t1 ~ 1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ 1
meaning_par3_t2 ~ 1

meaning_par1_t3 ~ i1*1
meaning_par2_t3 ~ 1
meaning_par3_t3 ~ 1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

meaning_par1_t3 ~~ meaning_par1_t3
meaning_par2_t3 ~~ meaning_par2_t3
meaning_par3_t3 ~~ meaning_par3_t3

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1
meaning3 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning3 ~~ meaning3
meaning1 ~~ meaning2
meaning2 ~~ meaning3
meaning1 ~~ meaning3
'
fit_weak_meaning <- cfa(weak_meaning, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_meaning, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2
meaning3 =~ NA*meaning_par1_t3 + lambda1*meaning_par1_t3 + lambda2*meaning_par2_t3 + lambda3*meaning_par3_t3

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ i2*1
meaning_par3_t1 ~ i3*1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ i2*1
meaning_par3_t2 ~ i3*1

meaning_par1_t3 ~ i1*1
meaning_par2_t3 ~ i2*1
meaning_par3_t3 ~ i3*1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

meaning_par1_t3 ~~ meaning_par1_t3
meaning_par2_t3 ~~ meaning_par2_t3
meaning_par3_t3 ~~ meaning_par3_t3

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1
meaning3 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning3 ~~ meaning3
meaning1 ~~ meaning2
meaning1 ~~ meaning3
meaning2 ~~ meaning3
'
fit_strong_meaning <- cfa(strong_meaning, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_meaning, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2
meaning3 =~ NA*meaning_par1_t3 + lambda1*meaning_par1_t3 + lambda2*meaning_par2_t3 + lambda3*meaning_par3_t3

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ i2*1
meaning_par3_t1 ~ i3*1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ i2*1
meaning_par3_t2 ~ i3*1

meaning_par1_t3 ~ i1*1
meaning_par2_t3 ~ i2*1
meaning_par3_t3 ~ i3*1

# Unique Variances
meaning_par1_t1 ~~ u1*meaning_par1_t1
meaning_par2_t1 ~~ u2*meaning_par2_t1
meaning_par3_t1 ~~ u3*meaning_par3_t1

meaning_par1_t2 ~~ u1*meaning_par1_t2
meaning_par2_t2 ~~ u2*meaning_par2_t2
meaning_par3_t2 ~~ u3*meaning_par3_t2

meaning_par1_t3 ~~ u1*meaning_par1_t3
meaning_par2_t3 ~~ u2*meaning_par2_t3
meaning_par3_t3 ~~ u3*meaning_par3_t3

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1
meaning3 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning3 ~~ meaning3
meaning1 ~~ meaning2
meaning1 ~~ meaning3
meaning2 ~~ meaning3
'
fit_strict_meaning <- cfa(strict_meaning, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_meaning, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   848    30  561. 16778. 16920. 0.910 0.865 0.162 0.0390
2 weak         848    26  566. 16775. 16899. 0.910 0.884 0.151 0.0423
3 strong       848    22  568. 16769. 16874. 0.910 0.899 0.141 0.0420
4 strict       848    16  586. 16775. 16851. 0.908 0.913 0.130 0.0476
# chi-square difference test for nested models 
anova(fit_configural_meaning, fit_weak_meaning)

Chi-Squared Difference Test

                       Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural_meaning 24 16778 16920 561.41                            
fit_weak_meaning       28 16775 16898 566.50     5.0933 0.017954       4
                       Pr(>Chisq)
fit_configural_meaning           
fit_weak_meaning           0.2779
anova(fit_weak_meaning, fit_strong_meaning)

Chi-Squared Difference Test

                   Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_meaning   28 16775 16898 566.50                                    
fit_strong_meaning 32 16769 16874 568.49     1.9918     0       4     0.7373
anova(fit_strong_meaning, fit_strict_meaning)

Chi-Squared Difference Test

                   Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_strong_meaning 32 16769 16874 568.49                                       
fit_strict_meaning 38 16775 16851 586.21     17.716 0.047987       6   0.006982
                     
fit_strong_meaning   
fit_strict_meaning **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given.

4.1.3 Self-esteem

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + selfes_par2_t1 + selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + selfes_par2_t2 + selfes_par3_t2
selfes3 =~ NA*selfes_par1_t3 + lambda1*selfes_par1_t3 + selfes_par2_t3 + selfes_par3_t3

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ 1
selfes_par3_t1 ~ 1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ 1
selfes_par3_t2 ~ 1

selfes_par1_t3 ~ i1*1
selfes_par2_t3 ~ 1
selfes_par3_t3 ~ 1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

selfes_par1_t3 ~~ selfes_par1_t3
selfes_par2_t3 ~~ selfes_par2_t3
selfes_par3_t3 ~~ selfes_par3_t3

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1
selfes3 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes3 ~~ selfes3
selfes1 ~~ selfes2
selfes1 ~~ selfes3
selfes2 ~~ selfes3
'
fit_configural_selfes <- cfa(configural_selfes, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_selfes, fit.measures = TRUE)

# Weak invariance model
weak_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2
selfes3 =~ NA*selfes_par1_t3 + lambda1*selfes_par1_t3 + lambda2*selfes_par2_t3 + lambda3*selfes_par3_t3

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ 1
selfes_par3_t1 ~ 1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ 1
selfes_par3_t2 ~ 1

selfes_par1_t3 ~ i1*1
selfes_par2_t3 ~ 1
selfes_par3_t3 ~ 1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

selfes_par1_t3 ~~ selfes_par1_t3
selfes_par2_t3 ~~ selfes_par2_t3
selfes_par3_t3 ~~ selfes_par3_t3

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1
selfes3 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes3 ~~ selfes3
selfes1 ~~ selfes2
selfes1 ~~ selfes3
selfes2 ~~ selfes3
'
fit_weak_selfes <- cfa(weak_selfes, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_selfes, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2
selfes3 =~ NA*selfes_par1_t3 + lambda1*selfes_par1_t3 + lambda2*selfes_par2_t3 + lambda3*selfes_par3_t3

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ i2*1
selfes_par3_t1 ~ i3*1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ i2*1
selfes_par3_t2 ~ i3*1

selfes_par1_t3 ~ i1*1
selfes_par2_t3 ~ i2*1
selfes_par3_t3 ~ i3*1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

selfes_par1_t3 ~~ selfes_par1_t3
selfes_par2_t3 ~~ selfes_par2_t3
selfes_par3_t3 ~~ selfes_par3_t3

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1
selfes3 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes3 ~~ selfes3
selfes1 ~~ selfes2
selfes1 ~~ selfes3
selfes2 ~~ selfes3
'
fit_strong_selfes <- cfa(strong_selfes, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_selfes, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2
selfes3 =~ NA*selfes_par1_t3 + lambda1*selfes_par1_t3 + lambda2*selfes_par2_t3 + lambda3*selfes_par3_t3

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ i2*1
selfes_par3_t1 ~ i3*1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ i2*1
selfes_par3_t2 ~ i3*1

selfes_par1_t3 ~ i1*1
selfes_par2_t3 ~ i2*1
selfes_par3_t3 ~ i3*1

# Unique Variances
selfes_par1_t1 ~~ u1*selfes_par1_t1
selfes_par2_t1 ~~ u2*selfes_par2_t1
selfes_par3_t1 ~~ u3*selfes_par3_t1

selfes_par1_t2 ~~ u1*selfes_par1_t2
selfes_par2_t2 ~~ u2*selfes_par2_t2
selfes_par3_t2 ~~ u3*selfes_par3_t2

selfes_par1_t3 ~~ u1*selfes_par1_t3
selfes_par2_t3 ~~ u2*selfes_par2_t3
selfes_par3_t3 ~~ u3*selfes_par3_t3

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1
selfes3 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes3 ~~ selfes3
selfes1 ~~ selfes2
selfes1 ~~ selfes3
selfes2 ~~ selfes3
'
fit_strict_selfes <- cfa(strict_selfes, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_selfes, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   848    30  520. 12326. 12468. 0.924 0.886 0.156 0.0379
2 weak         848    26  523. 12320. 12443. 0.924 0.902 0.144 0.0407
3 strong       848    22  526. 12315. 12419. 0.924 0.915 0.135 0.0400
4 strict       848    16  532. 12310. 12385. 0.924 0.928 0.124 0.0427
# chi-square difference test for nested models 
anova(fit_configural_selfes, fit_weak_selfes)

Chi-Squared Difference Test

                      Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_configural_selfes 24 12326 12468 520.25                                    
fit_weak_selfes       28 12320 12444 522.65     2.3939     0       4     0.6637
anova(fit_weak_selfes, fit_strong_selfes)

Chi-Squared Difference Test

                  Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_selfes   28 12320 12444 522.65                                    
fit_strong_selfes 32 12315 12419 525.54     2.8952     0       4     0.5755
anova(fit_strong_selfes, fit_strict_selfes)

Chi-Squared Difference Test

                  Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_strong_selfes 32 12315 12419 525.54                                       
fit_strict_selfes 38 12310 12386 532.10     6.5563 0.010456       6     0.3638

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.1.4 Self concept clarity

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + concept_par2_t1 + concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + concept_par2_t2 + concept_par3_t2
concept3 =~ NA*concept_par1_t3 + lambda1*concept_par1_t3 + concept_par2_t3 + concept_par3_t3

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ 1
concept_par3_t1 ~ 1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ 1
concept_par3_t2 ~ 1

concept_par1_t3 ~ i1*1
concept_par2_t3 ~ 1
concept_par3_t3 ~ 1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

concept_par1_t3 ~~ concept_par1_t3
concept_par2_t3 ~~ concept_par2_t3
concept_par3_t3 ~~ concept_par3_t3

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1
concept3 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept3 ~~ concept3
concept1 ~~ concept2
concept1 ~~ concept3
concept2 ~~ concept3
'
fit_configural_concept <- cfa(configural_concept, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_concept, fit.measures = TRUE)

# Weak invariance model
weak_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2
concept3 =~ NA*concept_par1_t3 + lambda1*concept_par1_t3 + lambda2*concept_par2_t3 + lambda3*concept_par3_t3

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ 1
concept_par3_t1 ~ 1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ 1
concept_par3_t2 ~ 1

concept_par1_t3 ~ i1*1
concept_par2_t3 ~ 1
concept_par3_t3 ~ 1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

concept_par1_t3 ~~ concept_par1_t3
concept_par2_t3 ~~ concept_par2_t3
concept_par3_t3 ~~ concept_par3_t3

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1
concept3 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept3 ~~ concept3
concept1 ~~ concept2
concept1 ~~ concept3
concept2 ~~ concept3
'
fit_weak_concept <- cfa(weak_concept, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_concept, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2
concept3 =~ NA*concept_par1_t3 + lambda1*concept_par1_t3 + lambda2*concept_par2_t3 + lambda3*concept_par3_t3

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ i2*1
concept_par3_t1 ~ i3*1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ i2*1
concept_par3_t2 ~ i3*1

concept_par1_t3 ~ i1*1
concept_par2_t3 ~ i2*1
concept_par3_t3 ~ i3*1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

concept_par1_t3 ~~ concept_par1_t3
concept_par2_t3 ~~ concept_par2_t3
concept_par3_t3 ~~ concept_par3_t3

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1
concept3 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept3 ~~ concept3
concept1 ~~ concept2
concept1 ~~ concept3
concept2 ~~ concept3
'
fit_strong_concept <- cfa(strong_concept, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_concept, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2
concept3 =~ NA*concept_par1_t3 + lambda1*concept_par1_t3 + lambda2*concept_par2_t3 + lambda3*concept_par3_t3

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ i2*1
concept_par3_t1 ~ i3*1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ i2*1
concept_par3_t2 ~ i3*1

concept_par1_t3 ~ i1*1
concept_par2_t3 ~ i2*1
concept_par3_t3 ~ i3*1

# Unique Variances
concept_par1_t1 ~~ u1*concept_par1_t1
concept_par2_t1 ~~ u2*concept_par2_t1
concept_par3_t1 ~~ u3*concept_par3_t1

concept_par1_t2 ~~ u1*concept_par1_t2
concept_par2_t2 ~~ u2*concept_par2_t2
concept_par3_t2 ~~ u3*concept_par3_t2

concept_par1_t3 ~~ u1*concept_par1_t3
concept_par2_t3 ~~ u2*concept_par2_t3
concept_par3_t3 ~~ u3*concept_par3_t3

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1
concept3 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept3 ~~ concept3
concept1 ~~ concept2
concept1 ~~ concept3
concept2 ~~ concept3
'
fit_strict_concept <- cfa(strict_concept, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_concept, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   848    30  393. 12613. 12755. 0.940 0.910 0.135 0.0290
2 weak         848    26  399. 12611. 12734. 0.940 0.923 0.125 0.0346
3 strong       848    22  401. 12605. 12710. 0.940 0.933 0.117 0.0351
4 strict       848    16  414. 12606. 12682. 0.939 0.942 0.108 0.0336
# chi-square difference test for nested models 
anova(fit_configural_concept, fit_weak_concept)

Chi-Squared Difference Test

                       Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural_concept 24 12613 12755 392.65                            
fit_weak_concept       28 12611 12734 399.02     6.3783 0.026479       4
                       Pr(>Chisq)
fit_configural_concept           
fit_weak_concept           0.1726
anova(fit_weak_concept, fit_strong_concept)

Chi-Squared Difference Test

                   Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_concept   28 12611 12734 399.02                                    
fit_strong_concept 32 12605 12710 401.24     2.2189     0       4     0.6956
anova(fit_strong_concept, fit_strict_concept)

Chi-Squared Difference Test

                   Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_strong_concept 32 12605 12710 401.24                                       
fit_strict_concept 38 12606 12682 413.94       12.7 0.036287       6    0.04806
                    
fit_strong_concept  
fit_strict_concept *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given (very close to .05).

4.2 Big Five: from T1 to T2

Testing for measurement invariance of the latent BFI-2 traits across time, from T1 to T2.

4.2.1 Extraversion: current-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + extra_curr_par2_t1 + extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + extra_curr_par2_t2 + extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ 1
extra_curr_par3_t1 ~ 1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_configural_extra_curr <- cfa(configural_extra_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_extra_curr, fit.measures = TRUE)

# Weak invariance model
weak_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ 1
extra_curr_par3_t1 ~ 1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_weak_extra_curr <- cfa(weak_extra_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_extra_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ i2*1
extra_curr_par3_t1 ~ i3*1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strong_extra_curr <- cfa(strong_extra_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_extra_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ i2*1
extra_curr_par3_t1 ~ i3*1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

# Unique Variances
extra_curr_par1_t1 ~~ u1*extra_curr_par1_t1
extra_curr_par2_t1 ~~ u2*extra_curr_par2_t1
extra_curr_par3_t1 ~~ u3*extra_curr_par3_t1

extra_curr_par1_t2 ~~ u1*extra_curr_par1_t2
extra_curr_par2_t2 ~~ u2*extra_curr_par2_t2
extra_curr_par3_t2 ~~ u3*extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strict_extra_curr <- cfa(strict_extra_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_extra_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  425. 7518. 7603. 0.814 0.651 0.278 0.0710
2 weak         674    17  426. 7515. 7592. 0.814 0.721 0.249 0.0727
3 strong       674    15  441. 7525. 7593. 0.809 0.761 0.230 0.0739
4 strict       674    12  442. 7520. 7574. 0.810 0.810 0.205 0.0764
# chi-square difference test for nested models 
anova(fit_configural_extra_curr, fit_weak_extra_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_extra_curr  8 7517.6 7603.4 425.15                         
fit_weak_extra_curr       10 7514.8 7591.6 426.37     1.2267     0       2
                          Pr(>Chisq)
fit_configural_extra_curr           
fit_weak_extra_curr           0.5415
anova(fit_weak_extra_curr, fit_strong_extra_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_extra_curr   10 7514.8 7591.6 426.37                            
fit_strong_extra_curr 12 7525.0 7592.7 440.53     14.159 0.094974       2
                      Pr(>Chisq)    
fit_weak_extra_curr                 
fit_strong_extra_curr  0.0008422 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_strong_extra_curr, fit_strict_extra_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_extra_curr 12 7525.0 7592.7 440.53                         
fit_strict_extra_curr 15 7520.2 7574.4 441.73     1.1995     0       3
                      Pr(>Chisq)
fit_strong_extra_curr           
fit_strict_extra_curr     0.7531

Model fit still not satisfactory. Chi^2 tests indicate that weak measurement invariance is given.

4.2.2 Extraversion: ideal-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + extra_ideal_par2_t1 + extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + extra_ideal_par2_t2 + extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ 1
extra_ideal_par3_t1 ~ 1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_configural_extra_ideal <- cfa(configural_extra_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_extra_ideal, fit.measures = TRUE)

# Weak invariance model
weak_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ 1
extra_ideal_par3_t1 ~ 1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_weak_extra_ideal <- cfa(weak_extra_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_extra_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ i2*1
extra_ideal_par3_t1 ~ i3*1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strong_extra_ideal <- cfa(strong_extra_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_extra_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ i2*1
extra_ideal_par3_t1 ~ i3*1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

# Unique Variances
extra_ideal_par1_t1 ~~ u1*extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ u2*extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ u3*extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ u1*extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ u2*extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ u3*extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strict_extra_ideal <- cfa(strict_extra_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_extra_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  164. 6257. 6343. 0.855 0.728 0.170 0.0577
2 weak         674    17  165. 6254. 6331. 0.856 0.783 0.152 0.0624
3 strong       674    15  166. 6251. 6319. 0.856 0.820 0.138 0.0645
4 strict       674    12  172. 6251. 6305. 0.854 0.854 0.125 0.0796
# chi-square difference test for nested models 
anova(fit_configural_extra_ideal, fit_weak_extra_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC Chisq Chisq diff RMSEA Df diff
fit_configural_extra_ideal  8 6256.9 6342.6 163.9                         
fit_weak_extra_ideal       10 6254.1 6330.8 165.1     1.1911     0       2
                           Pr(>Chisq)
fit_configural_extra_ideal           
fit_weak_extra_ideal           0.5513
anova(fit_weak_extra_ideal, fit_strong_extra_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC Chisq Chisq diff RMSEA Df diff
fit_weak_extra_ideal   10 6254.1 6330.8 165.1                         
fit_strong_extra_ideal 12 6251.3 6319.0 166.3     1.2085     0       2
                       Pr(>Chisq)
fit_weak_extra_ideal             
fit_strong_extra_ideal     0.5465
anova(fit_strong_extra_ideal, fit_strict_extra_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_extra_ideal 12 6251.3 6319.0 166.30                            
fit_strict_extra_ideal 15 6251.1 6305.2 172.11      5.801 0.037219       3
                       Pr(>Chisq)
fit_strong_extra_ideal           
fit_strict_extra_ideal     0.1217

Model fit still not satisfactory across all stages of measurement invariance. Chi^2 tests indicate that strict measurement invariance is given.

4.2.3 Agreeableness: current-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + agree_curr_par2_t1 + agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + agree_curr_par2_t2 + agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ 1
agree_curr_par3_t1 ~ 1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_configural_agree_curr <- cfa(configural_agree_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_agree_curr, fit.measures = TRUE)

# Weak invariance model
weak_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ 1
agree_curr_par3_t1 ~ 1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_weak_agree_curr <- cfa(weak_agree_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_agree_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ i2*1
agree_curr_par3_t1 ~ i3*1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strong_agree_curr <- cfa(strong_agree_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_agree_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ i2*1
agree_curr_par3_t1 ~ i3*1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

# Unique Variances
agree_curr_par1_t1 ~~ u1*agree_curr_par1_t1
agree_curr_par2_t1 ~~ u2*agree_curr_par2_t1
agree_curr_par3_t1 ~~ u3*agree_curr_par3_t1

agree_curr_par1_t2 ~~ u1*agree_curr_par1_t2
agree_curr_par2_t2 ~~ u2*agree_curr_par2_t2
agree_curr_par3_t2 ~~ u3*agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strict_agree_curr <- cfa(strict_agree_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_agree_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  198. 6007. 6092. 0.866 0.749 0.188 0.0694
2 weak         674    17  199. 6003. 6080. 0.867 0.801 0.167 0.0739
3 strong       674    15  199. 6000. 6067. 0.868 0.835 0.152 0.0747
4 strict       674    12  200. 5994. 6048. 0.870 0.870 0.135 0.0726
# chi-square difference test for nested models 
anova(fit_configural_agree_curr, fit_weak_agree_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_agree_curr  8 6006.6 6092.3 198.11                         
fit_weak_agree_curr       10 6003.4 6080.2 198.99    0.87407     0       2
                          Pr(>Chisq)
fit_configural_agree_curr           
fit_weak_agree_curr            0.646
anova(fit_weak_agree_curr, fit_strong_agree_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_agree_curr   10 6003.4 6080.2 198.99                         
fit_strong_agree_curr 12 5999.6 6067.3 199.12    0.12713     0       2
                      Pr(>Chisq)
fit_weak_agree_curr             
fit_strong_agree_curr     0.9384
anova(fit_strong_agree_curr, fit_strict_agree_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_agree_curr 12 5999.6 6067.3 199.12                         
fit_strict_agree_curr 15 5994.3 6048.5 199.88    0.76272     0       3
                      Pr(>Chisq)
fit_strong_agree_curr           
fit_strict_agree_curr     0.8584

Model fit still not satisfactory. Chi^2 tests indicate that strict measurement invariance is given.

4.2.4 Agreeableness: ideal-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + agree_ideal_par2_t1 + agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + agree_ideal_par2_t2 + agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ 1
agree_ideal_par3_t1 ~ 1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_configural_agree_ideal <- cfa(configural_agree_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_agree_ideal, fit.measures = TRUE)

# Weak invariance model
weak_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ 1
agree_ideal_par3_t1 ~ 1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_weak_agree_ideal <- cfa(weak_agree_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_agree_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ i2*1
agree_ideal_par3_t1 ~ i3*1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strong_agree_ideal <- cfa(strong_agree_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_agree_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ i2*1
agree_ideal_par3_t1 ~ i3*1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

# Unique Variances
agree_ideal_par1_t1 ~~ u1*agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ u2*agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ u3*agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ u1*agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ u2*agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ u3*agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strict_agree_ideal <- cfa(strict_agree_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_agree_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  156. 5948. 6034. 0.907 0.826 0.166 0.0511
2 weak         674    17  157. 5945. 6021. 0.908 0.862 0.148 0.0554
3 strong       674    15  157. 5941. 6009. 0.909 0.886 0.134 0.0555
4 strict       674    12  166. 5944. 5998. 0.905 0.905 0.122 0.0743
# chi-square difference test for nested models 
anova(fit_configural_agree_ideal, fit_weak_agree_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_agree_ideal  8 5947.8 6033.6 155.87                         
fit_weak_agree_ideal       10 5944.7 6021.4 156.77    0.90156     0       2
                           Pr(>Chisq)
fit_configural_agree_ideal           
fit_weak_agree_ideal           0.6371
anova(fit_weak_agree_ideal, fit_strong_agree_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_agree_ideal   10 5944.7 6021.4 156.77                         
fit_strong_agree_ideal 12 5941.1 6008.8 157.12    0.34684     0       2
                       Pr(>Chisq)
fit_weak_agree_ideal             
fit_strong_agree_ideal     0.8408
anova(fit_strong_agree_ideal, fit_strict_agree_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_agree_ideal 12 5941.1 6008.8 157.12                            
fit_strict_agree_ideal 15 5944.2 5998.4 166.26     9.1354 0.055085       3
                       Pr(>Chisq)  
fit_strong_agree_ideal             
fit_strict_agree_ideal    0.02754 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given.

4.2.5 Conscientiousness: current-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + consc_curr_par2_t1 + consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + consc_curr_par2_t2 + consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ 1
consc_curr_par3_t1 ~ 1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_configural_consc_curr <- cfa(configural_consc_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_consc_curr, fit.measures = TRUE)

# Weak invariance model
weak_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ 1
consc_curr_par3_t1 ~ 1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_weak_consc_curr <- cfa(weak_consc_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_consc_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ i2*1
consc_curr_par3_t1 ~ i3*1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strong_consc_curr <- cfa(strong_consc_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_consc_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ i2*1
consc_curr_par3_t1 ~ i3*1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

# Unique Variances
consc_curr_par1_t1 ~~ u1*consc_curr_par1_t1
consc_curr_par2_t1 ~~ u2*consc_curr_par2_t1
consc_curr_par3_t1 ~~ u3*consc_curr_par3_t1

consc_curr_par1_t2 ~~ u1*consc_curr_par1_t2
consc_curr_par2_t2 ~~ u2*consc_curr_par2_t2
consc_curr_par3_t2 ~~ u3*consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strict_consc_curr <- cfa(strict_consc_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_consc_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  219. 6528. 6614. 0.931 0.871 0.198 0.0329
2 weak         674    17  219. 6524. 6601. 0.932 0.898 0.176 0.0331
3 strong       674    15  221. 6522. 6589. 0.932 0.915 0.161 0.0339
4 strict       674    12  221. 6516. 6570. 0.933 0.933 0.143 0.0347
# chi-square difference test for nested models 
anova(fit_configural_consc_curr, fit_weak_consc_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_consc_curr  8 6527.8 6613.6 218.86                         
fit_weak_consc_curr       10 6524.0 6600.7 219.02    0.15856     0       2
                          Pr(>Chisq)
fit_configural_consc_curr           
fit_weak_consc_curr           0.9238
anova(fit_weak_consc_curr, fit_strong_consc_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_consc_curr   10 6524.0 6600.7 219.02                         
fit_strong_consc_curr 12 6521.7 6589.4 220.72     1.7006     0       2
                      Pr(>Chisq)
fit_weak_consc_curr             
fit_strong_consc_curr     0.4273
anova(fit_strong_consc_curr, fit_strict_consc_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_consc_curr 12 6521.7 6589.4 220.72                         
fit_strict_consc_curr 15 6516.3 6570.5 221.34    0.62505     0       3
                      Pr(>Chisq)
fit_strong_consc_curr           
fit_strict_consc_curr     0.8907

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.6 Conscientiousness: ideal-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + consc_ideal_par2_t1 + consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + consc_ideal_par2_t2 + consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ 1
consc_ideal_par3_t1 ~ 1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_configural_consc_ideal <- cfa(configural_consc_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_consc_ideal, fit.measures = TRUE)

# Weak invariance model
weak_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ 1
consc_ideal_par3_t1 ~ 1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_weak_consc_ideal <- cfa(weak_consc_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_consc_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ i2*1
consc_ideal_par3_t1 ~ i3*1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strong_consc_ideal <- cfa(strong_consc_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_consc_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ i2*1
consc_ideal_par3_t1 ~ i3*1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

# Unique Variances
consc_ideal_par1_t1 ~~ u1*consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ u2*consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ u3*consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ u1*consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ u2*consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ u3*consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strict_consc_ideal <- cfa(strict_consc_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_consc_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  136. 5143. 5229. 0.920 0.850 0.154 0.0436
2 weak         674    17  137. 5140. 5216. 0.921 0.882 0.137 0.0472
3 strong       674    15  137. 5136. 5204. 0.922 0.902 0.125 0.0484
4 strict       674    12  138. 5131. 5185. 0.923 0.923 0.110 0.0500
# chi-square difference test for nested models 
anova(fit_configural_consc_ideal, fit_weak_consc_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_consc_ideal  8 5143.4 5229.1 136.45                         
fit_weak_consc_ideal       10 5139.7 5216.4 136.80    0.35043     0       2
                           Pr(>Chisq)
fit_configural_consc_ideal           
fit_weak_consc_ideal           0.8393
anova(fit_weak_consc_ideal, fit_strong_consc_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_consc_ideal   10 5139.7 5216.4 136.80                         
fit_strong_consc_ideal 12 5136.3 5204.0 137.43    0.62624     0       2
                       Pr(>Chisq)
fit_weak_consc_ideal             
fit_strong_consc_ideal     0.7312
anova(fit_strong_consc_ideal, fit_strict_consc_ideal)

Chi-Squared Difference Test

                       Df    AIC  BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_consc_ideal 12 5136.3 5204 137.43                         
fit_strict_consc_ideal 15 5130.8 5185 137.93    0.50006     0       3
                       Pr(>Chisq)
fit_strong_consc_ideal           
fit_strict_consc_ideal     0.9189

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.7 Neuroticism: current-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + neuro_curr_par2_t1 + neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + neuro_curr_par2_t2 + neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ 1
neuro_curr_par3_t1 ~ 1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_configural_neuro_curr <- cfa(configural_neuro_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_neuro_curr, fit.measures = TRUE)

# Weak invariance model
weak_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ 1
neuro_curr_par3_t1 ~ 1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_weak_neuro_curr <- cfa(weak_neuro_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_neuro_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ i2*1
neuro_curr_par3_t1 ~ i3*1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strong_neuro_curr <- cfa(strong_neuro_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_neuro_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ i2*1
neuro_curr_par3_t1 ~ i3*1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

# Unique Variances
neuro_curr_par1_t1 ~~ u1*neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ u2*neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ u3*neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ u1*neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ u2*neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ u3*neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strict_neuro_curr <- cfa(strict_neuro_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_neuro_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  173. 6934. 7020. 0.949 0.905 0.175 0.0265
2 weak         674    17  173. 6930. 7007. 0.950 0.925 0.156 0.0271
3 strong       674    15  175. 6928. 6996. 0.950 0.937 0.142 0.0268
4 strict       674    12  180. 6927. 6981. 0.949 0.949 0.128 0.0296
# chi-square difference test for nested models 
anova(fit_configural_neuro_curr, fit_weak_neuro_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_neuro_curr  8 6934.0 7019.8 173.01                         
fit_weak_neuro_curr       10 6930.3 7007.1 173.32    0.30625     0       2
                          Pr(>Chisq)
fit_configural_neuro_curr           
fit_weak_neuro_curr            0.858
anova(fit_weak_neuro_curr, fit_strong_neuro_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff     RMSEA Df diff
fit_weak_neuro_curr   10 6930.3 7007.1 173.32                             
fit_strong_neuro_curr 12 6928.4 6996.1 175.36     2.0421 0.0055866       2
                      Pr(>Chisq)
fit_weak_neuro_curr             
fit_strong_neuro_curr     0.3602
anova(fit_strong_neuro_curr, fit_strict_neuro_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_neuro_curr 12 6928.4 6996.1 175.36                            
fit_strict_neuro_curr 15 6926.9 6981.1 179.87     4.5075 0.027305       3
                      Pr(>Chisq)
fit_strong_neuro_curr           
fit_strict_neuro_curr     0.2116

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.8 Neuroticism: ideal-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + neuro_ideal_par2_t1 + neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + neuro_ideal_par2_t2 + neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ 1
neuro_ideal_par3_t1 ~ 1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_configural_neuro_ideal <- cfa(configural_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_neuro_ideal, fit.measures = TRUE)

# Weak invariance model
weak_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ 1
neuro_ideal_par3_t1 ~ 1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_weak_neuro_ideal <- cfa(weak_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_neuro_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ i2*1
neuro_ideal_par3_t1 ~ i3*1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strong_neuro_ideal <- cfa(strong_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_neuro_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ i2*1
neuro_ideal_par3_t1 ~ i3*1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

# Unique Variances
neuro_ideal_par1_t1 ~~ u1*neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ u2*neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ u3*neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ u1*neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ u2*neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ u3*neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strict_neuro_ideal <- cfa(strict_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_neuro_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   674    19  15.5 5246. 5332. 0.995 0.991 0.0374 0.0129
2 weak         674    17  22.5 5249. 5326. 0.992 0.988 0.0431 0.0331
3 strong       674    15  24.8 5248. 5315. 0.992 0.989 0.0398 0.0369
4 strict       674    12  26.3 5243. 5297. 0.993 0.993 0.0335 0.0296
# chi-square difference test for nested models 
anova(fit_configural_neuro_ideal, fit_weak_neuro_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural_neuro_ideal  8 5246.4 5332.1 15.549                            
fit_weak_neuro_ideal       10 5249.4 5326.1 22.520     6.9709 0.060725       2
                           Pr(>Chisq)  
fit_configural_neuro_ideal             
fit_weak_neuro_ideal          0.03064 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_weak_neuro_ideal, fit_strong_neuro_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC Chisq Chisq diff    RMSEA Df diff
fit_weak_neuro_ideal   10 5249.4 5326.1 22.52                            
fit_strong_neuro_ideal 12 5247.7 5315.4 24.81     2.2898 0.014663       2
                       Pr(>Chisq)
fit_weak_neuro_ideal             
fit_strong_neuro_ideal     0.3183
anova(fit_strong_neuro_ideal, fit_strict_neuro_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_neuro_ideal 12 5247.7 5315.4 24.810                         
fit_strict_neuro_ideal 15 5243.2 5297.3 26.319     1.5092     0       3
                       Pr(>Chisq)
fit_strong_neuro_ideal           
fit_strict_neuro_ideal     0.6801

Very good model fit across all stages of measurement invariance. Chi^2 tests indicate that the test for weak measurement invariance is (barely) violated. Tests for strong and strict measurement invariance hold up, though. Probably ok to proceed, anyways.

4.2.9 Openness: current-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + openn_curr_par2_t1 + openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + openn_curr_par2_t2 + openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ 1
openn_curr_par3_t1 ~ 1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_configural_openn_curr <- cfa(configural_openn_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_openn_curr, fit.measures = TRUE)

# Weak invariance model
weak_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ 1
openn_curr_par3_t1 ~ 1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_weak_openn_curr <- cfa(weak_openn_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_openn_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ i2*1
openn_curr_par3_t1 ~ i3*1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strong_openn_curr <- cfa(strong_openn_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_openn_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ i2*1
openn_curr_par3_t1 ~ i3*1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

# Unique Variances
openn_curr_par1_t1 ~~ u1*openn_curr_par1_t1
openn_curr_par2_t1 ~~ u2*openn_curr_par2_t1
openn_curr_par3_t1 ~~ u3*openn_curr_par3_t1

openn_curr_par1_t2 ~~ u1*openn_curr_par1_t2
openn_curr_par2_t2 ~~ u2*openn_curr_par2_t2
openn_curr_par3_t2 ~~ u3*openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strict_openn_curr <- cfa(strict_openn_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_openn_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  155. 6334. 6420. 0.935 0.878 0.165 0.0370
2 weak         674    17  156. 6330. 6407. 0.936 0.903 0.147 0.0382
3 strong       674    15  160. 6330. 6398. 0.935 0.918 0.135 0.0396
4 strict       674    12  166. 6330. 6384. 0.933 0.933 0.122 0.0421
# chi-square difference test for nested models 
anova(fit_configural_openn_curr, fit_weak_openn_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_openn_curr  8 6333.8 6419.6 155.48                         
fit_weak_openn_curr       10 6330.1 6406.8 155.75    0.26746     0       2
                          Pr(>Chisq)
fit_configural_openn_curr           
fit_weak_openn_curr           0.8748
anova(fit_weak_openn_curr, fit_strong_openn_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_openn_curr   10 6330.1 6406.8 155.75                            
fit_strong_openn_curr 12 6330.0 6397.7 159.66      3.914 0.037681       2
                      Pr(>Chisq)
fit_weak_openn_curr             
fit_strong_openn_curr     0.1413
anova(fit_strong_openn_curr, fit_strict_openn_curr)

Chi-Squared Difference Test

                      Df  AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_openn_curr 12 6330 6397.7 159.66                            
fit_strict_openn_curr 15 6330 6384.2 165.68     6.0204 0.038649       3
                      Pr(>Chisq)
fit_strong_openn_curr           
fit_strict_openn_curr     0.1106

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.10 Openness: ideal-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + openn_ideal_par2_t1 + openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + openn_ideal_par2_t2 + openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ 1
openn_ideal_par3_t1 ~ 1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_configural_openn_ideal <- cfa(configural_openn_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_openn_ideal, fit.measures = TRUE)

# Weak invariance model
weak_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ 1
openn_ideal_par3_t1 ~ 1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_weak_openn_ideal <- cfa(weak_openn_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_openn_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ i2*1
openn_ideal_par3_t1 ~ i3*1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strong_openn_ideal <- cfa(strong_openn_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_openn_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ i2*1
openn_ideal_par3_t1 ~ i3*1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

# Unique Variances
openn_ideal_par1_t1 ~~ u1*openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ u2*openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ u3*openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ u1*openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ u2*openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ u3*openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strict_openn_ideal <- cfa(strict_openn_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_openn_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  162. 6090. 6176. 0.886 0.786 0.169 0.0648
2 weak         674    17  168. 6092. 6169. 0.883 0.824 0.153 0.0844
3 strong       674    15  173. 6093. 6161. 0.880 0.851 0.141 0.0808
4 strict       674    12  182. 6096. 6150. 0.876 0.876 0.128 0.0711
# chi-square difference test for nested models 
anova(fit_configural_openn_ideal, fit_weak_openn_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural_openn_ideal  8 6090.1 6175.9 162.04                            
fit_weak_openn_ideal       10 6092.1 6168.8 168.04     5.9987 0.054465       2
                           Pr(>Chisq)  
fit_configural_openn_ideal             
fit_weak_openn_ideal          0.04982 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_weak_openn_ideal, fit_strong_openn_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_openn_ideal   10 6092.1 6168.8 168.04                            
fit_strong_openn_ideal 12 6093.1 6160.8 173.05     5.0096 0.047251       2
                       Pr(>Chisq)  
fit_weak_openn_ideal               
fit_strong_openn_ideal    0.08169 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_strong_openn_ideal, fit_strict_openn_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_openn_ideal 12 6093.1 6160.8 173.05                            
fit_strict_openn_ideal 15 6095.8 6150.0 181.78     8.7264 0.053217       3
                       Pr(>Chisq)  
fit_strong_openn_ideal             
fit_strict_openn_ideal    0.03316 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Model fit not satisfactory across all stages of measurement invariance. Chi^2 tests indicate that the test for weak measurement invariance is just about violated at (very close to .05, though). Otherwise, strong measurement invariance is given. Probably ok to proceed!

4.3 Big Five: from T2 to T3

Testing for measurement invariance of the latent BFI-2 traits across time, from T2 to T3.

4.3.1 Extraversion: current-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + extra_curr_par2_t2 + extra_curr_par3_t2
extra_curr2 =~ NA*extra_curr_par1_t3 + lambda1*extra_curr_par1_t3 + extra_curr_par2_t3 + extra_curr_par3_t3

# Intercepts
extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

extra_curr_par1_t3 ~ i1*1
extra_curr_par2_t3 ~ 1
extra_curr_par3_t3 ~ 1

# Unique Variances
extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

extra_curr_par1_t3 ~~ extra_curr_par1_t3
extra_curr_par2_t3 ~~ extra_curr_par2_t3
extra_curr_par3_t3 ~~ extra_curr_par3_t3

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_configural2_extra_curr <- cfa(configural2_extra_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_extra_curr, fit.measures = TRUE)

# Weak invariance model
weak2_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2
extra_curr2 =~ NA*extra_curr_par1_t3 + lambda1*extra_curr_par1_t3 + lambda2*extra_curr_par2_t3 + lambda3*extra_curr_par3_t3

# Intercepts
extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

extra_curr_par1_t3 ~ i1*1
extra_curr_par2_t3 ~ 1
extra_curr_par3_t3 ~ 1

# Unique Variances
extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

extra_curr_par1_t3 ~~ extra_curr_par1_t3
extra_curr_par2_t3 ~~ extra_curr_par2_t3
extra_curr_par3_t3 ~~ extra_curr_par3_t3

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_weak2_extra_curr <- cfa(weak2_extra_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_extra_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2
extra_curr2 =~ NA*extra_curr_par1_t3 + lambda1*extra_curr_par1_t3 + lambda2*extra_curr_par2_t3 + lambda3*extra_curr_par3_t3

# Intercepts
extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

extra_curr_par1_t3 ~ i1*1
extra_curr_par2_t3 ~ i2*1
extra_curr_par3_t3 ~ i3*1

# Unique Variances
extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

extra_curr_par1_t3 ~~ extra_curr_par1_t3
extra_curr_par2_t3 ~~ extra_curr_par2_t3
extra_curr_par3_t3 ~~ extra_curr_par3_t3

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strong2_extra_curr <- cfa(strong2_extra_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_extra_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2
extra_curr2 =~ NA*extra_curr_par1_t3 + lambda1*extra_curr_par1_t3 + lambda2*extra_curr_par2_t3 + lambda3*extra_curr_par3_t3

# Intercepts
extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

extra_curr_par1_t3 ~ i1*1
extra_curr_par2_t3 ~ i2*1
extra_curr_par3_t3 ~ i3*1

# Unique Variances
extra_curr_par1_t2 ~~ u1*extra_curr_par1_t2
extra_curr_par2_t2 ~~ u2*extra_curr_par2_t2
extra_curr_par3_t2 ~~ u3*extra_curr_par3_t2

extra_curr_par1_t3 ~~ u1*extra_curr_par1_t3
extra_curr_par2_t3 ~~ u2*extra_curr_par2_t3
extra_curr_par3_t3 ~~ u3*extra_curr_par3_t3

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strict2_extra_curr <- cfa(strict2_extra_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_extra_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  398. 6335. 6418. 0.808 0.640 0.291 0.0696
2 weak         577    17  399. 6333. 6407. 0.808 0.713 0.260 0.0747
3 strong       577    15  402. 6332. 6397. 0.808 0.760 0.237 0.0726
4 strict       577    12  403. 6327. 6379. 0.809 0.809 0.212 0.0731
# chi-square difference test for nested models 
anova(fit_configural2_extra_curr, fit_weak2_extra_curr)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_extra_curr  8 6335.3 6418.1 397.63                         
fit_weak2_extra_curr       10 6333.0 6407.1 399.35     1.7174     0       2
                           Pr(>Chisq)
fit_configural2_extra_curr           
fit_weak2_extra_curr           0.4237
anova(fit_weak2_extra_curr, fit_strong2_extra_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak2_extra_curr   10 6333.0 6407.1 399.35                            
fit_strong2_extra_curr 12 6331.8 6397.2 402.16     2.8056 0.026421       2
                       Pr(>Chisq)
fit_weak2_extra_curr             
fit_strong2_extra_curr     0.2459
anova(fit_strong2_extra_curr, fit_strict2_extra_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_extra_curr 12 6331.8 6397.2 402.16                         
fit_strict2_extra_curr 15 6326.7 6379.0 403.07    0.91245     0       3
                       Pr(>Chisq)
fit_strong2_extra_curr           
fit_strict2_extra_curr     0.8224

Model fit still not satisfactory. Chi^2 tests indicate that strict measurement invariance is given.

4.3.2 Extraversion: ideal-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + extra_ideal_par2_t2 + extra_ideal_par3_t2
extra_ideal2 =~ NA*extra_ideal_par1_t3 + lambda1*extra_ideal_par1_t3 + extra_ideal_par2_t3 + extra_ideal_par3_t3

# Intercepts
extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

extra_ideal_par1_t3 ~ i1*1
extra_ideal_par2_t3 ~ 1
extra_ideal_par3_t3 ~ 1

# Unique Variances
extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

extra_ideal_par1_t3 ~~ extra_ideal_par1_t3
extra_ideal_par2_t3 ~~ extra_ideal_par2_t3
extra_ideal_par3_t3 ~~ extra_ideal_par3_t3

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_configural2_extra_ideal <- cfa(configural2_extra_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_extra_ideal, fit.measures = TRUE)

# Weak invariance model
weak2_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2
extra_ideal2 =~ NA*extra_ideal_par1_t3 + lambda1*extra_ideal_par1_t3 + lambda2*extra_ideal_par2_t3 + lambda3*extra_ideal_par3_t3

# Intercepts
extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

extra_ideal_par1_t3 ~ i1*1
extra_ideal_par2_t3 ~ 1
extra_ideal_par3_t3 ~ 1

# Unique Variances
extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

extra_ideal_par1_t3 ~~ extra_ideal_par1_t3
extra_ideal_par2_t3 ~~ extra_ideal_par2_t3
extra_ideal_par3_t3 ~~ extra_ideal_par3_t3

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_weak2_extra_ideal <- cfa(weak2_extra_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_extra_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2
extra_ideal2 =~ NA*extra_ideal_par1_t3 + lambda1*extra_ideal_par1_t3 + lambda2*extra_ideal_par2_t3 + lambda3*extra_ideal_par3_t3

# Intercepts
extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

extra_ideal_par1_t3 ~ i1*1
extra_ideal_par2_t3 ~ i2*1
extra_ideal_par3_t3 ~ i3*1

# Unique Variances
extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

extra_ideal_par1_t3 ~~ extra_ideal_par1_t3
extra_ideal_par2_t3 ~~ extra_ideal_par2_t3
extra_ideal_par3_t3 ~~ extra_ideal_par3_t3

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strong2_extra_ideal <- cfa(strong2_extra_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_extra_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2
extra_ideal2 =~ NA*extra_ideal_par1_t3 + lambda1*extra_ideal_par1_t3 + lambda2*extra_ideal_par2_t3 + lambda3*extra_ideal_par3_t3

# Intercepts
extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

extra_ideal_par1_t3 ~ i1*1
extra_ideal_par2_t3 ~ i2*1
extra_ideal_par3_t3 ~ i3*1

# Unique Variances
extra_ideal_par1_t2 ~~ u1*extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ u2*extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ u3*extra_ideal_par3_t2

extra_ideal_par1_t3 ~~ u1*extra_ideal_par1_t3
extra_ideal_par2_t3 ~~ u2*extra_ideal_par2_t3
extra_ideal_par3_t3 ~~ u3*extra_ideal_par3_t3

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strict2_extra_ideal <- cfa(strict2_extra_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_extra_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  169. 5357. 5440. 0.844 0.707 0.187 0.0617
2 weak         577    17  170. 5353. 5427. 0.845 0.768 0.166 0.0639
3 strong       577    15  170. 5350. 5415. 0.847 0.808 0.151 0.0637
4 strict       577    12  172. 5346. 5398. 0.847 0.847 0.135 0.0675
# chi-square difference test for nested models 
anova(fit_configural2_extra_ideal, fit_weak2_extra_ideal)

Chi-Squared Difference Test

                            Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_extra_ideal  8 5356.9 5439.7 169.37                         
fit_weak2_extra_ideal       10 5353.3 5427.4 169.75    0.38629     0       2
                            Pr(>Chisq)
fit_configural2_extra_ideal           
fit_weak2_extra_ideal           0.8244
anova(fit_weak2_extra_ideal, fit_strong2_extra_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak2_extra_ideal   10 5353.3 5427.4 169.75                         
fit_strong2_extra_ideal 12 5349.9 5415.2 170.34     0.5878     0       2
                        Pr(>Chisq)
fit_weak2_extra_ideal             
fit_strong2_extra_ideal     0.7454
anova(fit_strong2_extra_ideal, fit_strict2_extra_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_extra_ideal 12 5349.9 5415.2 170.34                         
fit_strict2_extra_ideal 15 5345.9 5398.2 172.39     2.0524     0       3
                        Pr(>Chisq)
fit_strong2_extra_ideal           
fit_strict2_extra_ideal     0.5616

Model fit still not satisfactory. Chi^2 tests indicate that strict measurement invariance is given.

4.3.3 Agreeableness: current-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + agree_curr_par2_t2 + agree_curr_par3_t2
agree_curr2 =~ NA*agree_curr_par1_t3 + lambda1*agree_curr_par1_t3 + agree_curr_par2_t3 + agree_curr_par3_t3

# Intercepts
agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

agree_curr_par1_t3 ~ i1*1
agree_curr_par2_t3 ~ 1
agree_curr_par3_t3 ~ 1

# Unique Variances
agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

agree_curr_par1_t3 ~~ agree_curr_par1_t3
agree_curr_par2_t3 ~~ agree_curr_par2_t3
agree_curr_par3_t3 ~~ agree_curr_par3_t3

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_configural2_agree_curr <- cfa(configural2_agree_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_agree_curr, fit.measures = TRUE)

# Weak invariance model
weak2_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2
agree_curr2 =~ NA*agree_curr_par1_t3 + lambda1*agree_curr_par1_t3 + lambda2*agree_curr_par2_t3 + lambda3*agree_curr_par3_t3

# Intercepts
agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

agree_curr_par1_t3 ~ i1*1
agree_curr_par2_t3 ~ 1
agree_curr_par3_t3 ~ 1

# Unique Variances
agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

agree_curr_par1_t3 ~~ agree_curr_par1_t3
agree_curr_par2_t3 ~~ agree_curr_par2_t3
agree_curr_par3_t3 ~~ agree_curr_par3_t3

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_weak2_agree_curr <- cfa(weak2_agree_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_agree_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2
agree_curr2 =~ NA*agree_curr_par1_t3 + lambda1*agree_curr_par1_t3 + lambda2*agree_curr_par2_t3 + lambda3*agree_curr_par3_t3

# Intercepts
agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

agree_curr_par1_t3 ~ i1*1
agree_curr_par2_t3 ~ i2*1
agree_curr_par3_t3 ~ i3*1

# Unique Variances
agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

agree_curr_par1_t3 ~~ agree_curr_par1_t3
agree_curr_par2_t3 ~~ agree_curr_par2_t3
agree_curr_par3_t3 ~~ agree_curr_par3_t3

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strong2_agree_curr <- cfa(strong2_agree_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_agree_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2
agree_curr2 =~ NA*agree_curr_par1_t3 + lambda1*agree_curr_par1_t3 + lambda2*agree_curr_par2_t3 + lambda3*agree_curr_par3_t3

# Intercepts
agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

agree_curr_par1_t3 ~ i1*1
agree_curr_par2_t3 ~ i2*1
agree_curr_par3_t3 ~ i3*1

# Unique Variances
agree_curr_par1_t2 ~~ u1*agree_curr_par1_t2
agree_curr_par2_t2 ~~ u2*agree_curr_par2_t2
agree_curr_par3_t2 ~~ u3*agree_curr_par3_t2

agree_curr_par1_t3 ~~ u1*agree_curr_par1_t3
agree_curr_par2_t3 ~~ u2*agree_curr_par2_t3
agree_curr_par3_t3 ~~ u3*agree_curr_par3_t3

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strict2_agree_curr <- cfa(strict2_agree_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_agree_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  239. 5005. 5088. 0.839 0.698 0.224 0.0754
2 weak         577    17  240. 5002. 5076. 0.840 0.760 0.200 0.0764
3 strong       577    15  240. 4998. 5063. 0.841 0.802 0.181 0.0767
4 strict       577    12  242. 4994. 5046. 0.842 0.842 0.162 0.0822
# chi-square difference test for nested models 
anova(fit_configural2_agree_curr, fit_weak2_agree_curr)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_agree_curr  8 5005.3 5088.1 239.49                         
fit_weak2_agree_curr       10 5001.6 5075.7 239.74    0.24587     0       2
                           Pr(>Chisq)
fit_configural2_agree_curr           
fit_weak2_agree_curr           0.8843
anova(fit_weak2_agree_curr, fit_strong2_agree_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak2_agree_curr   10 5001.6 5075.7 239.74                         
fit_strong2_agree_curr 12 4997.7 5063.1 239.83   0.093468     0       2
                       Pr(>Chisq)
fit_weak2_agree_curr             
fit_strong2_agree_curr     0.9543
anova(fit_strong2_agree_curr, fit_strict2_agree_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_agree_curr 12 4997.7 5063.1 239.83                         
fit_strict2_agree_curr 15 4993.8 5046.1 241.97     2.1344     0       3
                       Pr(>Chisq)
fit_strong2_agree_curr           
fit_strict2_agree_curr      0.545

Model fit still not satisfactory. Chi^2 tests indicate that strict measurement invariance is given.

4.3.4 Agreeableness: ideal-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + agree_ideal_par2_t2 + agree_ideal_par3_t2
agree_ideal2 =~ NA*agree_ideal_par1_t3 + lambda1*agree_ideal_par1_t3 + agree_ideal_par2_t3 + agree_ideal_par3_t3

# Intercepts
agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

agree_ideal_par1_t3 ~ i1*1
agree_ideal_par2_t3 ~ 1
agree_ideal_par3_t3 ~ 1

# Unique Variances
agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

agree_ideal_par1_t3 ~~ agree_ideal_par1_t3
agree_ideal_par2_t3 ~~ agree_ideal_par2_t3
agree_ideal_par3_t3 ~~ agree_ideal_par3_t3

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_configural2_agree_ideal <- cfa(configural2_agree_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_agree_ideal, fit.measures = TRUE)

# Weak invariance model
weak2_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2
agree_ideal2 =~ NA*agree_ideal_par1_t3 + lambda1*agree_ideal_par1_t3 + lambda2*agree_ideal_par2_t3 + lambda3*agree_ideal_par3_t3

# Intercepts
agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

agree_ideal_par1_t3 ~ i1*1
agree_ideal_par2_t3 ~ 1
agree_ideal_par3_t3 ~ 1

# Unique Variances
agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

agree_ideal_par1_t3 ~~ agree_ideal_par1_t3
agree_ideal_par2_t3 ~~ agree_ideal_par2_t3
agree_ideal_par3_t3 ~~ agree_ideal_par3_t3

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_weak2_agree_ideal <- cfa(weak2_agree_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_agree_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2
agree_ideal2 =~ NA*agree_ideal_par1_t3 + lambda1*agree_ideal_par1_t3 + lambda2*agree_ideal_par2_t3 + lambda3*agree_ideal_par3_t3

# Intercepts
agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

agree_ideal_par1_t3 ~ i1*1
agree_ideal_par2_t3 ~ i2*1
agree_ideal_par3_t3 ~ i3*1

# Unique Variances
agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

agree_ideal_par1_t3 ~~ agree_ideal_par1_t3
agree_ideal_par2_t3 ~~ agree_ideal_par2_t3
agree_ideal_par3_t3 ~~ agree_ideal_par3_t3

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strong2_agree_ideal <- cfa(strong2_agree_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_agree_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2
agree_ideal2 =~ NA*agree_ideal_par1_t3 + lambda1*agree_ideal_par1_t3 + lambda2*agree_ideal_par2_t3 + lambda3*agree_ideal_par3_t3

# Intercepts
agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

agree_ideal_par1_t3 ~ i1*1
agree_ideal_par2_t3 ~ i2*1
agree_ideal_par3_t3 ~ i3*1

# Unique Variances
agree_ideal_par1_t2 ~~ u1*agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ u2*agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ u3*agree_ideal_par3_t2

agree_ideal_par1_t3 ~~ u1*agree_ideal_par1_t3
agree_ideal_par2_t3 ~~ u2*agree_ideal_par2_t3
agree_ideal_par3_t3 ~~ u3*agree_ideal_par3_t3

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strict2_agree_ideal <- cfa(strict2_agree_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_agree_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  183. 4928. 5011. 0.891 0.795 0.195 0.0537
2 weak         577    17  186. 4927. 5001. 0.890 0.835 0.175 0.0717
3 strong       577    15  188. 4924. 4990. 0.891 0.863 0.159 0.0724
4 strict       577    12  189. 4919. 4972. 0.892 0.892 0.142 0.0654
# chi-square difference test for nested models 
anova(fit_configural2_agree_ideal, fit_weak2_agree_ideal)

Chi-Squared Difference Test

                            Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural2_agree_ideal  8 4928.0 5010.8 183.39                            
fit_weak2_agree_ideal       10 4927.1 5001.2 186.45     3.0622 0.030339       2
                            Pr(>Chisq)
fit_configural2_agree_ideal           
fit_weak2_agree_ideal           0.2163
anova(fit_weak2_agree_ideal, fit_strong2_agree_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak2_agree_ideal   10 4927.1 5001.2 186.45                         
fit_strong2_agree_ideal 12 4924.5 4989.8 187.84     1.3937     0       2
                        Pr(>Chisq)
fit_weak2_agree_ideal             
fit_strong2_agree_ideal     0.4982
anova(fit_strong2_agree_ideal, fit_strict2_agree_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_agree_ideal 12 4924.5 4989.8 187.84                         
fit_strict2_agree_ideal 15 4919.5 4971.7 188.82    0.97691     0       3
                        Pr(>Chisq)
fit_strong2_agree_ideal           
fit_strict2_agree_ideal     0.8068

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.3.5 Conscientiousness: current-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + consc_curr_par2_t2 + consc_curr_par3_t2
consc_curr2 =~ NA*consc_curr_par1_t3 + lambda1*consc_curr_par1_t3 + consc_curr_par2_t3 + consc_curr_par3_t3

# Intercepts
consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

consc_curr_par1_t3 ~ i1*1
consc_curr_par2_t3 ~ 1
consc_curr_par3_t3 ~ 1

# Unique Variances
consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

consc_curr_par1_t3 ~~ consc_curr_par1_t3
consc_curr_par2_t3 ~~ consc_curr_par2_t3
consc_curr_par3_t3 ~~ consc_curr_par3_t3

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_configural2_consc_curr <- cfa(configural2_consc_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_consc_curr, fit.measures = TRUE)

# Weak invariance model
weak2_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2
consc_curr2 =~ NA*consc_curr_par1_t3 + lambda1*consc_curr_par1_t3 + lambda2*consc_curr_par2_t3 + lambda3*consc_curr_par3_t3

# Intercepts
consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

consc_curr_par1_t3 ~ i1*1
consc_curr_par2_t3 ~ 1
consc_curr_par3_t3 ~ 1

# Unique Variances
consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

consc_curr_par1_t3 ~~ consc_curr_par1_t3
consc_curr_par2_t3 ~~ consc_curr_par2_t3
consc_curr_par3_t3 ~~ consc_curr_par3_t3

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_weak2_consc_curr <- cfa(weak2_consc_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_consc_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2
consc_curr2 =~ NA*consc_curr_par1_t3 + lambda1*consc_curr_par1_t3 + lambda2*consc_curr_par2_t3 + lambda3*consc_curr_par3_t3

# Intercepts
consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

consc_curr_par1_t3 ~ i1*1
consc_curr_par2_t3 ~ i2*1
consc_curr_par3_t3 ~ i3*1

# Unique Variances
consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

consc_curr_par1_t3 ~~ consc_curr_par1_t3
consc_curr_par2_t3 ~~ consc_curr_par2_t3
consc_curr_par3_t3 ~~ consc_curr_par3_t3

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strong2_consc_curr <- cfa(strong2_consc_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_consc_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2
consc_curr2 =~ NA*consc_curr_par1_t3 + lambda1*consc_curr_par1_t3 + lambda2*consc_curr_par2_t3 + lambda3*consc_curr_par3_t3

# Intercepts
consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

consc_curr_par1_t3 ~ i1*1
consc_curr_par2_t3 ~ i2*1
consc_curr_par3_t3 ~ i3*1

# Unique Variances
consc_curr_par1_t2 ~~ u1*consc_curr_par1_t2
consc_curr_par2_t2 ~~ u2*consc_curr_par2_t2
consc_curr_par3_t2 ~~ u3*consc_curr_par3_t2

consc_curr_par1_t3 ~~ u1*consc_curr_par1_t3
consc_curr_par2_t3 ~~ u2*consc_curr_par2_t3
consc_curr_par3_t3 ~~ u3*consc_curr_par3_t3

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strict2_consc_curr <- cfa(strict2_consc_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_consc_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  173. 5578. 5661. 0.940 0.888 0.189 0.0312
2 weak         577    17  173. 5575. 5649. 0.941 0.912 0.168 0.0317
3 strong       577    15  174. 5571. 5637. 0.942 0.927 0.153 0.0314
4 strict       577    12  174. 5566. 5618. 0.942 0.942 0.136 0.0317
# chi-square difference test for nested models 
anova(fit_configural2_consc_curr, fit_weak2_consc_curr)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_consc_curr  8 5578.5 5661.3 173.11                         
fit_weak2_consc_curr       10 5574.6 5648.7 173.29     0.1738     0       2
                           Pr(>Chisq)
fit_configural2_consc_curr           
fit_weak2_consc_curr           0.9168
anova(fit_weak2_consc_curr, fit_strong2_consc_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak2_consc_curr   10 5574.6 5648.7 173.29                         
fit_strong2_consc_curr 12 5571.1 5636.5 173.79    0.50808     0       2
                       Pr(>Chisq)
fit_weak2_consc_curr             
fit_strong2_consc_curr     0.7757
anova(fit_strong2_consc_curr, fit_strict2_consc_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_consc_curr 12 5571.1 5636.5 173.79                         
fit_strict2_consc_curr 15 5565.8 5618.1 174.44    0.64404     0       3
                       Pr(>Chisq)
fit_strong2_consc_curr           
fit_strict2_consc_curr     0.8863

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.3.6 Conscientiousness: ideal-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + consc_ideal_par2_t2 + consc_ideal_par3_t2
consc_ideal2 =~ NA*consc_ideal_par1_t3 + lambda1*consc_ideal_par1_t3 + consc_ideal_par2_t3 + consc_ideal_par3_t3

# Intercepts
consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

consc_ideal_par1_t3 ~ i1*1
consc_ideal_par2_t3 ~ 1
consc_ideal_par3_t3 ~ 1

# Unique Variances
consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

consc_ideal_par1_t3 ~~ consc_ideal_par1_t3
consc_ideal_par2_t3 ~~ consc_ideal_par2_t3
consc_ideal_par3_t3 ~~ consc_ideal_par3_t3

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_configural2_consc_ideal <- cfa(configural2_consc_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_consc_ideal, fit.measures = TRUE)

# Weak invariance model
weak2_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2
consc_ideal2 =~ NA*consc_ideal_par1_t3 + lambda1*consc_ideal_par1_t3 + lambda2*consc_ideal_par2_t3 + lambda3*consc_ideal_par3_t3

# Intercepts
consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

consc_ideal_par1_t3 ~ i1*1
consc_ideal_par2_t3 ~ 1
consc_ideal_par3_t3 ~ 1

# Unique Variances
consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

consc_ideal_par1_t3 ~~ consc_ideal_par1_t3
consc_ideal_par2_t3 ~~ consc_ideal_par2_t3
consc_ideal_par3_t3 ~~ consc_ideal_par3_t3

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_weak2_consc_ideal <- cfa(weak2_consc_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_consc_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2
consc_ideal2 =~ NA*consc_ideal_par1_t3 + lambda1*consc_ideal_par1_t3 + lambda2*consc_ideal_par2_t3 + lambda3*consc_ideal_par3_t3

# Intercepts
consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

consc_ideal_par1_t3 ~ i1*1
consc_ideal_par2_t3 ~ i2*1
consc_ideal_par3_t3 ~ i3*1

# Unique Variances
consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

consc_ideal_par1_t3 ~~ consc_ideal_par1_t3
consc_ideal_par2_t3 ~~ consc_ideal_par2_t3
consc_ideal_par3_t3 ~~ consc_ideal_par3_t3

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strong2_consc_ideal <- cfa(strong2_consc_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_consc_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2
consc_ideal2 =~ NA*consc_ideal_par1_t3 + lambda1*consc_ideal_par1_t3 + lambda2*consc_ideal_par2_t3 + lambda3*consc_ideal_par3_t3

# Intercepts
consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

consc_ideal_par1_t3 ~ i1*1
consc_ideal_par2_t3 ~ i2*1
consc_ideal_par3_t3 ~ i3*1

# Unique Variances
consc_ideal_par1_t2 ~~ u1*consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ u2*consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ u3*consc_ideal_par3_t2

consc_ideal_par1_t3 ~~ u1*consc_ideal_par1_t3
consc_ideal_par2_t3 ~~ u2*consc_ideal_par2_t3
consc_ideal_par3_t3 ~~ u3*consc_ideal_par3_t3

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strict2_consc_ideal <- cfa(strict2_consc_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_consc_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   577    19  70.8 4208. 4291. 0.959 0.923 0.117  0.0291
2 weak         577    17  73.4 4206. 4281. 0.959 0.938 0.105  0.0542
3 strong       577    15  75.8 4205. 4270. 0.958 0.948 0.0960 0.0561
4 strict       577    12  91.9 4215. 4267. 0.950 0.950 0.0942 0.0898
# chi-square difference test for nested models 
anova(fit_configural2_consc_ideal, fit_weak2_consc_ideal)

Chi-Squared Difference Test

                            Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural2_consc_ideal  8 4207.9 4290.7 70.821                            
fit_weak2_consc_ideal       10 4206.4 4280.5 73.376     2.5544 0.021919       2
                            Pr(>Chisq)
fit_configural2_consc_ideal           
fit_weak2_consc_ideal           0.2788
anova(fit_weak2_consc_ideal, fit_strong2_consc_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak2_consc_ideal   10 4206.4 4280.5 73.376                            
fit_strong2_consc_ideal 12 4204.8 4270.2 75.801     2.4256 0.019204       2
                        Pr(>Chisq)
fit_weak2_consc_ideal             
fit_strong2_consc_ideal     0.2974
anova(fit_strong2_consc_ideal, fit_strict2_consc_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong2_consc_ideal 12 4204.8 4270.2 75.801                            
fit_strict2_consc_ideal 15 4214.9 4267.2 91.852     16.051 0.086831       3
                        Pr(>Chisq)   
fit_strong2_consc_ideal              
fit_strict2_consc_ideal   0.001107 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given.

4.3.7 Neuroticism: current-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + neuro_curr_par2_t2 + neuro_curr_par3_t2
neuro_curr2 =~ NA*neuro_curr_par1_t3 + lambda1*neuro_curr_par1_t3 + neuro_curr_par2_t3 + neuro_curr_par3_t3

# Intercepts
neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

neuro_curr_par1_t3 ~ i1*1
neuro_curr_par2_t3 ~ 1
neuro_curr_par3_t3 ~ 1

# Unique Variances
neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

neuro_curr_par1_t3 ~~ neuro_curr_par1_t3
neuro_curr_par2_t3 ~~ neuro_curr_par2_t3
neuro_curr_par3_t3 ~~ neuro_curr_par3_t3

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_configural2_neuro_curr <- cfa(configural2_neuro_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_neuro_curr, fit.measures = TRUE)

# Weak invariance model
weak2_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2
neuro_curr2 =~ NA*neuro_curr_par1_t3 + lambda1*neuro_curr_par1_t3 + lambda2*neuro_curr_par2_t3 + lambda3*neuro_curr_par3_t3

# Intercepts
neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

neuro_curr_par1_t3 ~ i1*1
neuro_curr_par2_t3 ~ 1
neuro_curr_par3_t3 ~ 1

# Unique Variances
neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

neuro_curr_par1_t3 ~~ neuro_curr_par1_t3
neuro_curr_par2_t3 ~~ neuro_curr_par2_t3
neuro_curr_par3_t3 ~~ neuro_curr_par3_t3

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_weak2_neuro_curr <- cfa(weak2_neuro_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_neuro_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2
neuro_curr2 =~ NA*neuro_curr_par1_t3 + lambda1*neuro_curr_par1_t3 + lambda2*neuro_curr_par2_t3 + lambda3*neuro_curr_par3_t3

# Intercepts
neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

neuro_curr_par1_t3 ~ i1*1
neuro_curr_par2_t3 ~ i2*1
neuro_curr_par3_t3 ~ i3*1

# Unique Variances
neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

neuro_curr_par1_t3 ~~ neuro_curr_par1_t3
neuro_curr_par2_t3 ~~ neuro_curr_par2_t3
neuro_curr_par3_t3 ~~ neuro_curr_par3_t3

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strong2_neuro_curr <- cfa(strong2_neuro_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_neuro_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2
neuro_curr2 =~ NA*neuro_curr_par1_t3 + lambda1*neuro_curr_par1_t3 + lambda2*neuro_curr_par2_t3 + lambda3*neuro_curr_par3_t3

# Intercepts
neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

neuro_curr_par1_t3 ~ i1*1
neuro_curr_par2_t3 ~ i2*1
neuro_curr_par3_t3 ~ i3*1

# Unique Variances
neuro_curr_par1_t2 ~~ u1*neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ u2*neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ u3*neuro_curr_par3_t2

neuro_curr_par1_t3 ~~ u1*neuro_curr_par1_t3
neuro_curr_par2_t3 ~~ u2*neuro_curr_par2_t3
neuro_curr_par3_t3 ~~ u3*neuro_curr_par3_t3

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strict2_neuro_curr <- cfa(strict2_neuro_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_neuro_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   577    19  99.1 5872. 5955. 0.968 0.939 0.140  0.0219
2 weak         577    17  99.4 5868. 5942. 0.968 0.952 0.124  0.0232
3 strong       577    15 101.  5866. 5931. 0.968 0.961 0.113  0.0232
4 strict       577    12 101.  5860. 5913. 0.969 0.969 0.0999 0.0243
# chi-square difference test for nested models 
anova(fit_configural2_neuro_curr, fit_weak2_neuro_curr)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_neuro_curr  8 5872.1 5954.9 99.065                         
fit_weak2_neuro_curr       10 5868.4 5942.5 99.397    0.33158     0       2
                           Pr(>Chisq)
fit_configural2_neuro_curr           
fit_weak2_neuro_curr           0.8472
anova(fit_weak2_neuro_curr, fit_strong2_neuro_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC   Chisq Chisq diff RMSEA Df diff
fit_weak2_neuro_curr   10 5868.4 5942.5  99.397                         
fit_strong2_neuro_curr 12 5865.6 5930.9 100.582     1.1852     0       2
                       Pr(>Chisq)
fit_weak2_neuro_curr             
fit_strong2_neuro_curr     0.5529
anova(fit_strong2_neuro_curr, fit_strict2_neuro_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_neuro_curr 12 5865.6 5930.9 100.58                         
fit_strict2_neuro_curr 15 5860.4 5912.7 101.46    0.87338     0       3
                       Pr(>Chisq)
fit_strong2_neuro_curr           
fit_strict2_neuro_curr     0.8318

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.3.8 Neuroticism: ideal-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + neuro_ideal_par2_t2 + neuro_ideal_par3_t2
neuro_ideal2 =~ NA*neuro_ideal_par1_t3 + lambda1*neuro_ideal_par1_t3 + neuro_ideal_par2_t3 + neuro_ideal_par3_t3

# Intercepts
neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

neuro_ideal_par1_t3 ~ i1*1
neuro_ideal_par2_t3 ~ 1
neuro_ideal_par3_t3 ~ 1

# Unique Variances
neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

neuro_ideal_par1_t3 ~~ neuro_ideal_par1_t3
neuro_ideal_par2_t3 ~~ neuro_ideal_par2_t3
neuro_ideal_par3_t3 ~~ neuro_ideal_par3_t3

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_configural2_neuro_ideal <- cfa(configural2_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_neuro_ideal, fit.measures = TRUE)

# Weak invariance model
weak2_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2
neuro_ideal2 =~ NA*neuro_ideal_par1_t3 + lambda1*neuro_ideal_par1_t3 + lambda2*neuro_ideal_par2_t3 + lambda3*neuro_ideal_par3_t3

# Intercepts
neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

neuro_ideal_par1_t3 ~ i1*1
neuro_ideal_par2_t3 ~ 1
neuro_ideal_par3_t3 ~ 1

# Unique Variances
neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

neuro_ideal_par1_t3 ~~ neuro_ideal_par1_t3
neuro_ideal_par2_t3 ~~ neuro_ideal_par2_t3
neuro_ideal_par3_t3 ~~ neuro_ideal_par3_t3

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_weak2_neuro_ideal <- cfa(weak2_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_neuro_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2
neuro_ideal2 =~ NA*neuro_ideal_par1_t3 + lambda1*neuro_ideal_par1_t3 + lambda2*neuro_ideal_par2_t3 + lambda3*neuro_ideal_par3_t3

# Intercepts
neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

neuro_ideal_par1_t3 ~ i1*1
neuro_ideal_par2_t3 ~ i2*1
neuro_ideal_par3_t3 ~ i3*1

# Unique Variances
neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

neuro_ideal_par1_t3 ~~ neuro_ideal_par1_t3
neuro_ideal_par2_t3 ~~ neuro_ideal_par2_t3
neuro_ideal_par3_t3 ~~ neuro_ideal_par3_t3

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strong2_neuro_ideal <- cfa(strong2_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_neuro_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2
neuro_ideal2 =~ NA*neuro_ideal_par1_t3 + lambda1*neuro_ideal_par1_t3 + lambda2*neuro_ideal_par2_t3 + lambda3*neuro_ideal_par3_t3

# Intercepts
neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

neuro_ideal_par1_t3 ~ i1*1
neuro_ideal_par2_t3 ~ i2*1
neuro_ideal_par3_t3 ~ i3*1

# Unique Variances
neuro_ideal_par1_t2 ~~ u1*neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ u2*neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ u3*neuro_ideal_par3_t2

neuro_ideal_par1_t3 ~~ u1*neuro_ideal_par1_t3
neuro_ideal_par2_t3 ~~ u2*neuro_ideal_par2_t3
neuro_ideal_par3_t3 ~~ u3*neuro_ideal_par3_t3

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strict2_neuro_ideal <- cfa(strict2_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_neuro_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   577    19  37.4 4514. 4596. 0.978 0.958 0.0798 0.0219
2 weak         577    17  40.1 4512. 4586. 0.977 0.966 0.0722 0.0309
3 strong       577    15  43.1 4511. 4577. 0.976 0.971 0.0670 0.0364
4 strict       577    12  48.3 4510. 4563. 0.975 0.975 0.0620 0.0280
# chi-square difference test for nested models 
anova(fit_configural2_neuro_ideal, fit_weak2_neuro_ideal)

Chi-Squared Difference Test

                            Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural2_neuro_ideal  8 4513.5 4596.3 37.415                            
fit_weak2_neuro_ideal       10 4512.2 4586.3 40.113     2.6987 0.024606       2
                            Pr(>Chisq)
fit_configural2_neuro_ideal           
fit_weak2_neuro_ideal           0.2594
anova(fit_weak2_neuro_ideal, fit_strong2_neuro_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff   RMSEA Df diff
fit_weak2_neuro_ideal   10 4512.2 4586.3 40.113                           
fit_strong2_neuro_ideal 12 4511.3 4576.6 43.122     3.0084 0.02956       2
                        Pr(>Chisq)
fit_weak2_neuro_ideal             
fit_strong2_neuro_ideal     0.2222
anova(fit_strong2_neuro_ideal, fit_strict2_neuro_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong2_neuro_ideal 12 4511.3 4576.6 43.122                            
fit_strict2_neuro_ideal 15 4510.4 4562.7 48.255     5.1328 0.035101       3
                        Pr(>Chisq)
fit_strong2_neuro_ideal           
fit_strict2_neuro_ideal     0.1623

Good model fit across all stages of measurement invariance. Chi^2 tests indicate that strict measurement invariance is given.

4.3.9 Openness: current-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + openn_curr_par2_t2 + openn_curr_par3_t2
openn_curr2 =~ NA*openn_curr_par1_t3 + lambda1*openn_curr_par1_t3 + openn_curr_par2_t3 + openn_curr_par3_t3

# Intercepts
openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

openn_curr_par1_t3 ~ i1*1
openn_curr_par2_t3 ~ 1
openn_curr_par3_t3 ~ 1

# Unique Variances
openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

openn_curr_par1_t3 ~~ openn_curr_par1_t3
openn_curr_par2_t3 ~~ openn_curr_par2_t3
openn_curr_par3_t3 ~~ openn_curr_par3_t3

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_configural2_openn_curr <- cfa(configural2_openn_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_openn_curr, fit.measures = TRUE)

# Weak invariance model
weak2_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2
openn_curr2 =~ NA*openn_curr_par1_t3 + lambda1*openn_curr_par1_t3 + lambda2*openn_curr_par2_t3 + lambda3*openn_curr_par3_t3

# Intercepts
openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

openn_curr_par1_t3 ~ i1*1
openn_curr_par2_t3 ~ 1
openn_curr_par3_t3 ~ 1

# Unique Variances
openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

openn_curr_par1_t3 ~~ openn_curr_par1_t3
openn_curr_par2_t3 ~~ openn_curr_par2_t3
openn_curr_par3_t3 ~~ openn_curr_par3_t3

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_weak2_openn_curr <- cfa(weak2_openn_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_openn_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2
openn_curr2 =~ NA*openn_curr_par1_t3 + lambda1*openn_curr_par1_t3 + lambda2*openn_curr_par2_t3 + lambda3*openn_curr_par3_t3

# Intercepts
openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

openn_curr_par1_t3 ~ i1*1
openn_curr_par2_t3 ~ i2*1
openn_curr_par3_t3 ~ i3*1

# Unique Variances
openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

openn_curr_par1_t3 ~~ openn_curr_par1_t3
openn_curr_par2_t3 ~~ openn_curr_par2_t3
openn_curr_par3_t3 ~~ openn_curr_par3_t3

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strong2_openn_curr <- cfa(strong2_openn_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_openn_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2
openn_curr2 =~ NA*openn_curr_par1_t3 + lambda1*openn_curr_par1_t3 + lambda2*openn_curr_par2_t3 + lambda3*openn_curr_par3_t3

# Intercepts
openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

openn_curr_par1_t3 ~ i1*1
openn_curr_par2_t3 ~ i2*1
openn_curr_par3_t3 ~ i3*1

# Unique Variances
openn_curr_par1_t2 ~~ u1*openn_curr_par1_t2
openn_curr_par2_t2 ~~ u2*openn_curr_par2_t2
openn_curr_par3_t2 ~~ u3*openn_curr_par3_t2

openn_curr_par1_t3 ~~ u1*openn_curr_par1_t3
openn_curr_par2_t3 ~~ u2*openn_curr_par2_t3
openn_curr_par3_t3 ~~ u3*openn_curr_par3_t3

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strict2_openn_curr <- cfa(strict2_openn_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_openn_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  208. 5257. 5340. 0.911 0.834 0.208 0.0423
2 weak         577    17  209. 5254. 5328. 0.912 0.868 0.186 0.0439
3 strong       577    15  209. 5250. 5315. 0.913 0.891 0.169 0.0437
4 strict       577    12  212. 5247. 5299. 0.913 0.913 0.151 0.0447
# chi-square difference test for nested models 
anova(fit_configural2_openn_curr, fit_weak2_openn_curr)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_openn_curr  8 5257.1 5339.9 207.96                         
fit_weak2_openn_curr       10 5253.9 5328.0 208.72    0.76522     0       2
                           Pr(>Chisq)
fit_configural2_openn_curr           
fit_weak2_openn_curr           0.6821
anova(fit_weak2_openn_curr, fit_strong2_openn_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak2_openn_curr   10 5253.9 5328.0 208.72                         
fit_strong2_openn_curr 12 5249.9 5315.3 208.75   0.028496     0       2
                       Pr(>Chisq)
fit_weak2_openn_curr             
fit_strong2_openn_curr     0.9859
anova(fit_strong2_openn_curr, fit_strict2_openn_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_openn_curr 12 5249.9 5315.3 208.75                         
fit_strict2_openn_curr 15 5246.9 5299.2 211.71     2.9624     0       3
                       Pr(>Chisq)
fit_strong2_openn_curr           
fit_strict2_openn_curr     0.3975

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.3.10 Openness: ideal-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + openn_ideal_par2_t2 + openn_ideal_par3_t2
openn_ideal2 =~ NA*openn_ideal_par1_t3 + lambda1*openn_ideal_par1_t3 + openn_ideal_par2_t3 + openn_ideal_par3_t3

# Intercepts
openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

openn_ideal_par1_t3 ~ i1*1
openn_ideal_par2_t3 ~ 1
openn_ideal_par3_t3 ~ 1

# Unique Variances
openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

openn_ideal_par1_t3 ~~ openn_ideal_par1_t3
openn_ideal_par2_t3 ~~ openn_ideal_par2_t3
openn_ideal_par3_t3 ~~ openn_ideal_par3_t3

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_configural2_openn_ideal <- cfa(configural2_openn_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_openn_ideal, fit.measures = TRUE)

# Weak invariance model
weak2_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2
openn_ideal2 =~ NA*openn_ideal_par1_t3 + lambda1*openn_ideal_par1_t3 + lambda2*openn_ideal_par2_t3 + lambda3*openn_ideal_par3_t3

# Intercepts
openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

openn_ideal_par1_t3 ~ i1*1
openn_ideal_par2_t3 ~ 1
openn_ideal_par3_t3 ~ 1

# Unique Variances
openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

openn_ideal_par1_t3 ~~ openn_ideal_par1_t3
openn_ideal_par2_t3 ~~ openn_ideal_par2_t3
openn_ideal_par3_t3 ~~ openn_ideal_par3_t3

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_weak2_openn_ideal <- cfa(weak2_openn_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_openn_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2
openn_ideal2 =~ NA*openn_ideal_par1_t3 + lambda1*openn_ideal_par1_t3 + lambda2*openn_ideal_par2_t3 + lambda3*openn_ideal_par3_t3

# Intercepts
openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

openn_ideal_par1_t3 ~ i1*1
openn_ideal_par2_t3 ~ i2*1
openn_ideal_par3_t3 ~ i3*1

# Unique Variances
openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

openn_ideal_par1_t3 ~~ openn_ideal_par1_t3
openn_ideal_par2_t3 ~~ openn_ideal_par2_t3
openn_ideal_par3_t3 ~~ openn_ideal_par3_t3

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strong2_openn_ideal <- cfa(strong2_openn_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_openn_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2
openn_ideal2 =~ NA*openn_ideal_par1_t3 + lambda1*openn_ideal_par1_t3 + lambda2*openn_ideal_par2_t3 + lambda3*openn_ideal_par3_t3

# Intercepts
openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

openn_ideal_par1_t3 ~ i1*1
openn_ideal_par2_t3 ~ i2*1
openn_ideal_par3_t3 ~ i3*1

# Unique Variances
openn_ideal_par1_t2 ~~ u1*openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ u2*openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ u3*openn_ideal_par3_t2

openn_ideal_par1_t3 ~~ u1*openn_ideal_par1_t3
openn_ideal_par2_t3 ~~ u2*openn_ideal_par2_t3
openn_ideal_par3_t3 ~~ u3*openn_ideal_par3_t3

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strict2_openn_ideal <- cfa(strict2_openn_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_openn_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   576    19  116. 5248. 5331. 0.905 0.822 0.153 0.0658
2 weak         576    17  117. 5245. 5319. 0.906 0.859 0.136 0.0712
3 strong       576    15  121. 5246. 5311. 0.904 0.880 0.126 0.0739
4 strict       576    12  123. 5241. 5294. 0.905 0.905 0.112 0.0683
# chi-square difference test for nested models 
anova(fit_configural2_openn_ideal, fit_weak2_openn_ideal)

Chi-Squared Difference Test

                            Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_openn_ideal  8 5248.2 5330.9 115.88                         
fit_weak2_openn_ideal       10 5245.4 5319.4 117.09     1.2118     0       2
                            Pr(>Chisq)
fit_configural2_openn_ideal           
fit_weak2_openn_ideal           0.5456
anova(fit_weak2_openn_ideal, fit_strong2_openn_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak2_openn_ideal   10 5245.4 5319.4 117.09                            
fit_strong2_openn_ideal 12 5245.7 5311.0 121.41     4.3138 0.044817       2
                        Pr(>Chisq)
fit_weak2_openn_ideal             
fit_strong2_openn_ideal     0.1157
anova(fit_strong2_openn_ideal, fit_strict2_openn_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_openn_ideal 12 5245.7 5311.0 121.41                         
fit_strict2_openn_ideal 15 5241.5 5293.8 123.19     1.7786     0       3
                        Pr(>Chisq)
fit_strong2_openn_ideal           
fit_strict2_openn_ideal     0.6196

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.


5 Descriptives

5.1 Sample size

How many participants at each time point and in each condition?

df_sbsa2 %>% group_by(time, rando) %>% tally()
# A tibble: 9 × 3
# Groups:   time [3]
   time rando                n
  <dbl> <chr>            <int>
1     1 Self-Acceptance    336
2     1 Self-Improvement   338
3     1 Waitlist-Control   174
4     2 Self-Acceptance    284
5     2 Self-Improvement   293
6     2 Waitlist-Control   147
7     3 Self-Acceptance    252
8     3 Self-Improvement   262
9     3 Waitlist-Control   125

5.2 Demographics

Gender and age distribution

# across all participants
df_sbsa2 %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  mutate(gender_num = ifelse(gender=="Female", 1, 0)) %>% 
  summarise(n = n(), women = sum(gender_num), m_age = mean(age, na.rm=T), 
            sd_age = sd(age, na.rm=T), min_age = min(age, na.rm=T), max_age = max(age, na.rm=T))
# A tibble: 1 × 6
      n women m_age sd_age min_age max_age
  <int> <dbl> <dbl>  <dbl>   <dbl>   <dbl>
1   849   421  30.6   9.65      18      75
df_sbsa2 %>% group_by(time, rando) %>% 
  summarise(n = n(), m_age = mean(age, na.rm=T), sd_age = sd(age, na.rm=T), min_age = min(age, na.rm=T), max_age = max(age, na.rm=T))
# A tibble: 9 × 7
# Groups:   time [3]
   time rando                n m_age sd_age min_age max_age
  <dbl> <chr>            <int> <dbl>  <dbl>   <dbl>   <dbl>
1     1 Self-Acceptance    336  30.5   8.87      20      65
2     1 Self-Improvement   338  30.3   9.38      18      69
3     1 Waitlist-Control   174  31.2  11.2       19      75
4     2 Self-Acceptance    284  30.8   8.98      20      65
5     2 Self-Improvement   293  30.3   9.30      20      69
6     2 Waitlist-Control   147  31.9  11.8       19      75
7     3 Self-Acceptance    252  31.1   8.96      20      65
8     3 Self-Improvement   262  30.7   9.41      20      69
9     3 Waitlist-Control   125  32.4  12.3       19      75
df_sbsa2 %>% group_by(time, rando, gender) %>% 
  summarise(n = n(), m_age = mean(age, na.rm=T), sd_age = sd(age, na.rm=T), min_age = min(age, na.rm=T), max_age = max(age, na.rm=T))
# A tibble: 18 × 8
# Groups:   time, rando [9]
    time rando            gender     n m_age sd_age min_age max_age
   <dbl> <chr>            <chr>  <int> <dbl>  <dbl>   <dbl>   <dbl>
 1     1 Self-Acceptance  Female   169  31     9.82      20      65
 2     1 Self-Acceptance  Male     167  30.0   7.79      20      58
 3     1 Self-Improvement Female   166  31.0   9.15      20      65
 4     1 Self-Improvement Male     172  29.8   9.58      18      69
 5     1 Waitlist-Control Female    85  31.9  11.4       21      69
 6     1 Waitlist-Control Male      89  30.6  11.0       19      75
 7     2 Self-Acceptance  Female   142  30.9   9.83      20      65
 8     2 Self-Acceptance  Male     142  30.8   8.07      20      58
 9     2 Self-Improvement Female   143  30.8   8.82      20      59
10     2 Self-Improvement Male     150  29.9   9.75      20      69
11     2 Waitlist-Control Female    75  33.0  12.4       21      69
12     2 Waitlist-Control Male      72  30.7  11.1       19      75
13     3 Self-Acceptance  Female   127  30.8   9.64      20      65
14     3 Self-Acceptance  Male     125  31.5   8.23      20      58
15     3 Self-Improvement Female   126  31     8.65      20      56
16     3 Self-Improvement Male     136  30.4  10.1       20      69
17     3 Waitlist-Control Female    65  33.6  12.9       21      69
18     3 Waitlist-Control Male      60  31.0  11.6       19      75

Other demographics (from Prolific info):

# across all participants: ethnicity
df_sbsa2 %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(ethnicity) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3))
# A tibble: 6 × 3
  ethnicity     n   prop
  <chr>     <int>  <dbl>
1 White       553 65.1  
2 Black       207 24.4  
3 Mixed        38  4.48 
4 Asian        28  3.30 
5 Other        20  2.36 
6 <NA>          3  0.353
# across all participants: country of residence
df_sbsa2 %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(country) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3)) %>% print(n=20)
# A tibble: 30 × 3
   country            n   prop
   <chr>          <int>  <dbl>
 1 South Africa     236 27.8  
 2 Poland           119 14.0  
 3 Portugal         119 14.0  
 4 United Kingdom    96 11.3  
 5 Italy             73  8.60 
 6 Spain             46  5.42 
 7 Mexico            27  3.18 
 8 Greece            25  2.94 
 9 Hungary           18  2.12 
10 Canada            17  2.00 
11 Netherlands       10  1.18 
12 France             9  1.06 
13 Ireland            7  0.824
14 Czech Republic     6  0.707
15 Israel             5  0.589
16 United States      5  0.589
17 Australia          4  0.471
18 Chile              4  0.471
19 Estonia            4  0.471
20 Slovenia           4  0.471
# ℹ 10 more rows
# across all participants: student status
df_sbsa2 %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(student) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3))
# A tibble: 3 × 3
  student     n  prop
  <chr>   <int> <dbl>
1 No        425  50.1
2 Yes       314  37.0
3 <NA>      110  13.0
# across all participants: employment status
df_sbsa2 %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(employed) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3))
# A tibble: 7 × 3
  employed                                                     n   prop
  <chr>                                                    <int>  <dbl>
1 Full-Time                                                  385 45.3  
2 Part-Time                                                  123 14.5  
3 Unemployed (and job seeking)                               122 14.4  
4 <NA>                                                       121 14.3  
5 Other                                                       62  7.30 
6 Not in paid work (e.g. homemaker', 'retired or disabled)    28  3.30 
7 Due to start a new job within the next month                 8  0.942

5.3 Internal consistencies

On the trait/dimensional level:

# created in study 2 cleaning script 
kable(int_consist_traits_st2, digits = 3)
trait rel_alpha_current rel_alpha_ideal rel_omega_t_current rel_omega_t_ideal rel_omega_h_current rel_omega_h_ideal
lifesat 0.881 NA 0.897 NA 0.794 NA
meaning 0.881 NA 0.944 NA 0.558 NA
selfes 0.908 NA 0.925 NA 0.718 NA
concept 0.902 NA 0.919 NA 0.848 NA
extra 0.835 0.697 0.872 0.746 0.651 0.512
agree 0.779 0.775 0.836 0.830 0.521 0.654
consc 0.878 0.813 0.903 0.854 0.699 0.692
neuro 0.901 0.781 0.918 0.828 0.771 0.692
openn 0.814 0.769 0.856 0.826 0.618 0.579

McDonald’s omega only really makes sense for the Big Five dimensions (with their three facets each) but I’ve added it for the well-being measures as well. Keep in mind that a few of the omega computations for the well-being measures only converged with error messages. These constructs were not neccessarily intended to be tested in this multidimensional manner for internal consistency.

On the facet level:

# created in study 2 cleaning script 
kable(int_consist_facets_st2, digits = 3)
facet rel_alpha_current rel_alpha_ideal
socia 0.821 0.599
asser 0.716 0.514
energ 0.680 0.486
compa 0.529 0.459
respe 0.682 0.657
trust 0.656 0.632
organ 0.823 0.581
produ 0.774 0.690
respo 0.689 0.592
anxie 0.757 0.439
depre 0.813 0.606
volat 0.816 0.680
curio 0.657 0.592
aesth 0.672 0.526
imagi 0.718 0.580

5.4 General change/acceptance goals

Summary stats:

table(df_sbsa2$sb06_01) # How much do you want to change your personality in general?

  1   2   3   4   5 
 34  81 179  89  27 
summary(df_sbsa2$sb06_01)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  1.000   2.000   3.000   2.985   4.000   5.000    1801 
table(df_sbsa2$sa06_01) # How much do you want to be better at accepting yourself for who you are?

  1   2   3   4   5 
  9  12  65 121 203 
summary(df_sbsa2$sa06_01)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  1.000   4.000   4.000   4.212   5.000   5.000    1801 

Plot:

cowplot::plot_grid(
  ggplot(df_sbsa2 %>% filter(!is.na(sb06_01)), aes(x=sb06_01)) + geom_histogram(bins=5) + 
  labs(x="General change goal", y="Frequency") + theme_bw(),
  ggplot(df_sbsa2 %>% filter(!is.na(sa06_01)), aes(x=sa06_01)) + geom_histogram(bins=5) + 
  labs(x="General acceptance goal", y="Frequency") + theme_bw(), 
  ncol = 2
)

5.5 Facet-specific change/acceptance goals

Self-Improvement

Pre:
Here is a list of 15 personality traits. You might be high or low on any of these traits. Regardless of how high or low you are on these traits, we want to know how much you [want to] change. Please rate how much you would like to change your level of each of these traits, where 1 = I do not want to change and 5 = I want to change a lot.

Post:
Here is a list of 15 personality traits. During the study, you may have tried to change in some of these traits. We want to know how you think you changed in each trait. Please rate how much you changed your level of each of these traits during this study, where 1 = I am completely the same and 5 = I have changed a lot.

Self Acceptance

Pre:
Here is a list of 15 personality traits. You might be high or low on any of these traits. Regardless of how high or low you are on these traits, we want to know how much you accept yourself. Please rate how much you accept your level of each of these traits, where 1 = I completely accept myself and 5 = I want to accept myself more.

Post:
Here is a list of 15 personality traits. During the study, you may have tried to accept your level on some of these traits more. We want to know how much you think you accept yourself more because of this study. Please rate how much you accept your level of each of these traits more during this study, where 1 = I accept myself the same and 5 = I accept this about myself much more.

Plot distributions

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 01], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_01)), aes(x=sb07_01)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_01)), aes(x=sb12_01)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_01)), aes(x=sa07_01)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_01)), aes(x=sa14_01)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 02], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_02)), aes(x=sb07_02)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_02)), aes(x=sb12_02)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_02)), aes(x=sa07_02)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_02)), aes(x=sa14_02)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 03], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_03)), aes(x=sb07_03)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_03)), aes(x=sb12_03)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_03)), aes(x=sa07_03)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_03)), aes(x=sa14_03)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 04], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_04)), aes(x=sb07_04)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_04)), aes(x=sb12_04)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_04)), aes(x=sa07_04)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_04)), aes(x=sa14_04)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 05], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_05)), aes(x=sb07_05)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175, 200), limits = c(0,220)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_05)), aes(x=sb12_05)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175, 200), limits = c(0,220)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_05)), aes(x=sa07_05)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175, 200), limits = c(0,220)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_05)), aes(x=sa14_05)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175, 200), limits = c(0,220)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 06], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_06)), aes(x=sb07_06)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_06)), aes(x=sb12_06)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_06)), aes(x=sa07_06)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_06)), aes(x=sa14_06)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 07], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_07)), aes(x=sb07_07)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_07)), aes(x=sb12_07)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_07)), aes(x=sa07_07)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_07)), aes(x=sa14_07)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 08], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_08)), aes(x=sb07_08)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_08)), aes(x=sb12_08)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_08)), aes(x=sa07_08)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_08)), aes(x=sa14_08)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 09], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_09)), aes(x=sb07_09)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_09)), aes(x=sb12_09)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_09)), aes(x=sa07_09)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_09)), aes(x=sa14_09)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 10], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_10)), aes(x=sb07_10)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175), limits = c(0,200)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_10)), aes(x=sb12_10)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175), limits = c(0,200)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_10)), aes(x=sa07_10)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175), limits = c(0,200)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_10)), aes(x=sa14_10)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175), limits = c(0,200)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 11], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_11)), aes(x=sb07_11)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_11)), aes(x=sb12_11)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_11)), aes(x=sa07_11)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_11)), aes(x=sa14_11)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 12], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_12)), aes(x=sb07_12)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_12)), aes(x=sb12_12)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_12)), aes(x=sa07_12)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_12)), aes(x=sa14_12)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 13], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_13)), aes(x=sb07_13)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_13)), aes(x=sb12_13)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_13)), aes(x=sa07_13)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_13)), aes(x=sa14_13)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 14], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_14)), aes(x=sb07_14)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_14)), aes(x=sb12_14)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_14)), aes(x=sa07_14)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_14)), aes(x=sa14_14)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 15], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_15)), aes(x=sb07_15)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_15)), aes(x=sb12_15)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_15)), aes(x=sa07_15)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_15)), aes(x=sa14_15)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)


6 Confirmatory results

6.1 H1: Well-being - similarity correlations (H4 in paper)

All four psychological well-being indicators will be positively correlated with a greater similarity between current- and ideal self-ratings of personality.

To examine this at the level of overall profiles, we will compute the correlations between the psychological well-being indicators and the Fisher z transformed correlations between the facet- and item-level real-ideal self-profiles. To examine this at the level of individual traits, we will compute the correlation between psychological well-being indicators and the squared difference between current- and ideal-self rating for each Big Five trait and facet.

6.1.1 Profile similarity

Only in the intervention groups (without the waitlist control group).

Computations:

Show the code
cormat_profile <- cor((df_sbsa2 %>% filter(rando!="Waitlist-Control"))[, c("swls", "meaning", "selfes", "concept",
                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")

rownames(cormat_profile) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
corrplot(cormat_profile, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Positive correlations of well-being indicators with profile similarity between current self and ideal self personality. Especially high correlation with self-esteem. High congruence of item-level and facet-level profile similarity.

6.1.1.1 Change in this relation over time and across intervention groups

Computations:

Show the code
# T1
cormat_profile_sb_t1 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==1))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sb_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sb_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

cormat_profile_sa_t1 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==1))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sa_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sa_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

# T2
cormat_profile_sb_t2 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==2))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sb_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sb_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

cormat_profile_sa_t2 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==2))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sa_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sa_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

# T3
cormat_profile_sb_t3 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==3))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sb_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sb_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

cormat_profile_sa_t3 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==3))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sa_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sa_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

T1

First assessment: Self-improvement group

corrplot(cormat_profile_sb_t1, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

First assessment: Self-acceptance group

corrplot(cormat_profile_sa_t1, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

T2
Second assessment: Self-improvement group

corrplot(cormat_profile_sb_t2, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Second assessment: Self-acceptance group

corrplot(cormat_profile_sa_t2, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

T3
Third assessment: Self-improvement group

corrplot(cormat_profile_sb_t3, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Third assessment: Self-acceptance group

corrplot(cormat_profile_sa_t3, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

No pronounced differences across time or groups.

6.1.2 Individual traits: squared differences

Only in the intervention groups (without the waitlist control group).

Computations:

Show the code
cormat_sqtraits <- cor((df_sbsa2 %>% filter(rando!="Waitlist-Control"))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")

rownames(cormat_sqtraits) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqfacets <- cor(df_sbsa2[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[6:20], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")

rownames(cormat_sqfacets) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[6:20]))
colnames(cormat_sqfacets) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[6:20]))

Big Five traits

corrplot(cormat_sqtraits, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
         addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Big Five facets

corrplot(cormat_sqfacets, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
         addCoef.col ='black', number.cex = 0.6, diag = FALSE) # also add numbers

Here we see negative correlations of well-being indicators with squared trait- and facet-level mean-score differences between current self and ideal self personality. Especially pronounced negative correlations for neuroticism, extraversion, and conscientiousness (in that order). On the facet-level, we see that depression is the facet with the highest correlation of its squared difference with well-being, followed by energy. Within conscientiousness, productiveness has the strongest correlation.

6.1.2.1 Change in this relation over time and across intervention groups

Only looking at the trait level for now!

Computations:

Show the code
# T1
cormat_sqtraits_sb_t1 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==1))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sb_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sb_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqtraits_sa_t1 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==1))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sa_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sa_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

# T2
cormat_sqtraits_sb_t2 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==2))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sb_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sb_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqtraits_sa_t2 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==2))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sa_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sa_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

# T3
cormat_sqtraits_sb_t3 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==3))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sb_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sb_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqtraits_sa_t3 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==3))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sa_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sa_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

T1

First assessment: Self-improvement group

corrplot(cormat_sqtraits_sb_t1, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

First assessment: Self-acceptance group

corrplot(cormat_sqtraits_sa_t1, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

High similarity at T1.

T2
Second assessment: Self-improvement group

corrplot(cormat_sqtraits_sb_t2, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Second assessment: Self-acceptance group

corrplot(cormat_sqtraits_sa_t2, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

At T2, attenuated correlations for agreeableness and (to a lesser degree) conscientiousness in the self-improvement group compared to T1.

T3
Third assessment: Self-improvement group

corrplot(cormat_sqtraits_sb_t3, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Third assessment: Self-acceptance group

corrplot(cormat_sqtraits_sa_t3, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

At T3, slightly lower correlations for neuroticism in the self-acceptance group (compared to the self-improvement group). But only small difference.

6.1.2.2 Exploratory: Controlling for initial trait levels

Additional, exploratory analysis: Are the relationships of the squared trait differences with well-being similar when we control for initial trait levels (at T1)?

Example with extraversion:

cor(df_sbsa2 %>% filter(rando!="Waitlist-Control" & time==1) %>% pull(swls), 
    df_sbsa2 %>% filter(rando!="Waitlist-Control" & time==1) %>% pull(extra_sqdiff), 
    use = "pairwise.complete.obs") %>% round(2)
[1] -0.38
# basic model to replicate the correlation
mod_ex_1 <- lm(swls ~ extra_sqdiff, data = df_sbsa2 %>% filter(rando!="Waitlist-Control" & time==1))
summary(mod_ex_1)$coef
               Estimate Std. Error   t value      Pr(>|t|)
(Intercept)   3.0767166 0.04770753  64.49122 8.286778e-290
extra_sqdiff -0.1877679 0.01767740 -10.62192  1.821543e-24
effectsize::standardize_parameters(mod_ex_1)
# Standardization method: refit

Parameter    | Std. Coef. |         95% CI
------------------------------------------
(Intercept)  |   9.13e-16 | [-0.07,  0.07]
extra_sqdiff |      -0.38 | [-0.45, -0.31]
# adjusted model controlling for initial trait level
mod_ex_2 <- lm(swls ~ extra_sqdiff + extra_comb_curr, 
               data = df_sbsa2 %>% filter(rando!="Waitlist-Control" & time==1))
summary(mod_ex_2)$coef
                   Estimate Std. Error   t value     Pr(>|t|)
(Intercept)      1.91350186 0.23355736  8.192856 1.294315e-15
extra_sqdiff    -0.09460717 0.02524177 -3.748040 1.935991e-04
extra_comb_curr  0.35295712 0.06942857  5.083745 4.807365e-07
effectsize::standardize_parameters(mod_ex_2)
# Standardization method: refit

Parameter       | Std. Coef. |         95% CI
---------------------------------------------
(Intercept)     |   9.58e-16 | [-0.07,  0.07]
extra_sqdiff    |      -0.19 | [-0.29, -0.09]
extra_comb_curr |       0.26 | [ 0.16,  0.36]

Reduced correlation (effect size) in the adjusted model but still significant.

Only T1:

Show the code
# prepare df
df_check_adjusted <- df_sbsa2 %>% 
  # reshape with well-being outcomes and current trait levels
  filter(rando!="Waitlist-Control" & time==1) %>% 
  select(pid, rando, 
         swls, meaning, selfes, concept,
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_curr")) %>% 
  pivot_longer(ends_with("_comb_curr"), 
               names_to = "test", names_prefix = "facet", values_to = "initial", values_drop_na = TRUE) %>% 
  mutate(test = sub("_.*", "", test)) %>% 
  left_join(
    df_sbsa2 %>% 
    # reshape with squared differences -> add to previous
      filter(rando!="Waitlist-Control" & time==1) %>% 
      select(pid, rando, ends_with("_sqdiff")) %>% 
      pivot_longer(ends_with("_sqdiff"), 
                   names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
      mutate(test = sub("_.*", "", test))
  )

# run models 
# swls
df_check_adjusted_swls <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ swls + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_swls_unlist <- as.data.frame(summary(df_check_adjusted_swls[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_swls)) {
  df_check_adjusted_swls_unlist <- 
    bind_rows(df_check_adjusted_swls_unlist, 
              as.data.frame(summary(df_check_adjusted_swls[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls[[i]])$Std_Coefficient))
}
df_check_adjusted_swls_unlist <- df_check_adjusted_swls_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "swls", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# meaning
df_check_adjusted_meaning <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ meaning + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_meaning_unlist <- as.data.frame(summary(df_check_adjusted_meaning[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_meaning)) {
  df_check_adjusted_meaning_unlist <- 
    bind_rows(df_check_adjusted_meaning_unlist, 
              as.data.frame(summary(df_check_adjusted_meaning[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning[[i]])$Std_Coefficient))
}
df_check_adjusted_meaning_unlist <- df_check_adjusted_meaning_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "meaning", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# selfes
df_check_adjusted_selfes <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ selfes + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_selfes_unlist <- as.data.frame(summary(df_check_adjusted_selfes[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_selfes)) {
  df_check_adjusted_selfes_unlist <- 
    bind_rows(df_check_adjusted_selfes_unlist, 
              as.data.frame(summary(df_check_adjusted_selfes[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes[[i]])$Std_Coefficient))
}
df_check_adjusted_selfes_unlist <- df_check_adjusted_selfes_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "selfes", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# concept
df_check_adjusted_concept <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ concept + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_concept_unlist <- as.data.frame(summary(df_check_adjusted_concept[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_concept)) {
  df_check_adjusted_concept_unlist <- 
    bind_rows(df_check_adjusted_concept_unlist, 
              as.data.frame(summary(df_check_adjusted_concept[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept[[i]])$Std_Coefficient))
}
df_check_adjusted_concept_unlist <- df_check_adjusted_concept_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "concept", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

Does the relationship between the squared difference in one trait (current vs. ideal) and well-being aspects still hold if we control for the initial trait level?

Combine as one table:

kable(df_check_adjusted_swls_unlist %>% 
        filter(!term %in% c("Intercept", "initial")) %>% 
        select(outcome, d_swls = d, p_ls = p, sig_ls = sig) %>% 
        left_join(
          df_check_adjusted_meaning_unlist %>% 
            filter(!term %in% c("Intercept", "initial")) %>% 
            select(outcome, d_meaning = d, p_m = p, sig_m = sig)
        ) %>% 
          left_join(
            df_check_adjusted_selfes_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_selfes = d, p_se = p, sig_se = sig)
          ) %>% 
          left_join(
            df_check_adjusted_concept_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_concept = d, p_c = p, sig_c = sig)
          ), 
       digits = 3)
outcome d_swls p_ls sig_ls d_meaning p_m sig_m d_selfes p_se sig_se d_concept p_c sig_c
extraversion -0.107 0.000 *** -0.138 0.000 *** -0.089 0.005 ** -0.089 0.002 **
agreeableness -0.117 0.001 *** -0.127 0.000 *** -0.164 0.000 *** -0.190 0.000 ***
conscientiousness -0.092 0.001 *** -0.078 0.003 ** -0.076 0.007 ** -0.052 0.056
neuroticism -0.035 0.138 -0.056 0.018 * -0.045 0.107 -0.005 0.843
openness -0.081 0.017 * -0.108 0.001 ** -0.099 0.004 ** -0.098 0.004 **
sociability -0.109 0.000 *** -0.136 0.000 *** -0.102 0.001 ** -0.082 0.006 **
assertiveness -0.084 0.005 ** -0.107 0.000 *** -0.029 0.370 -0.105 0.001 ***
energy -0.083 0.006 ** -0.099 0.001 *** -0.111 0.001 *** -0.079 0.007 **
compassion -0.085 0.019 * -0.060 0.096 -0.107 0.003 ** -0.149 0.000 ***
respectfulness -0.072 0.026 * -0.094 0.004 ** -0.104 0.002 ** -0.100 0.002 **
trust -0.062 0.063 -0.089 0.008 ** -0.098 0.004 ** -0.136 0.000 ***
organization -0.067 0.011 * -0.070 0.007 ** -0.049 0.066 -0.051 0.055
productiveness -0.063 0.008 ** -0.061 0.011 * -0.045 0.073 -0.057 0.021 *
responsibility -0.135 0.000 *** -0.109 0.000 *** -0.134 0.000 *** -0.092 0.004 **
anxiety -0.032 0.197 -0.028 0.251 -0.034 0.203 0.011 0.669
depression -0.048 0.044 * -0.066 0.006 ** -0.068 0.021 * -0.010 0.670
volatility -0.068 0.006 ** -0.102 0.000 *** -0.077 0.004 ** -0.063 0.018 *
curiosity -0.114 0.001 *** -0.120 0.000 *** -0.096 0.004 ** -0.124 0.000 ***
aesthetic -0.009 0.801 -0.096 0.007 ** -0.044 0.223 -0.085 0.018 *
imagination -0.084 0.005 ** -0.107 0.000 *** -0.104 0.001 *** -0.070 0.021 *

Effects mostly still significant but not always at the p < .001 level. Correlation is especially stongly reduced for neuroticism and its facets depression and anxiety. Effects are still relatively pronounced for extraversion (strongest for sociability) and conscientiousness (strongest for responsibility). Volatility facet from neuroticism also shows comparatively strong effects.

Across all time points, using a mixed model:

Show the code
# prepare df
df_check_adjusted_all <- df_sbsa2 %>% 
  # reshape with well-being outcomes and current trait levels
  filter(rando!="Waitlist-Control") %>% 
  select(pid, rando, time,
         swls, meaning, selfes, concept,
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff")) %>% 
  pivot_longer(ends_with("_sqdiff"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  mutate(test = sub("_.*", "", test)) %>% 
  left_join(
    df_sbsa2 %>% 
    # reshape with squared differences -> add to previous
      filter(rando!="Waitlist-Control" & time==1) %>% 
      select(pid, rando, ends_with("_comb_curr")) %>% 
      pivot_longer(ends_with("_comb_curr"), 
                   names_to = "test", names_prefix = "facet", values_to = "initial", values_drop_na = TRUE) %>% 
      mutate(test = sub("_.*", "", test))
  )

# run models 
# swls
df_check_adjusted_swls_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ swls + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_swls_all_unlist <- as.data.frame(summary(df_check_adjusted_swls_all[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls_all[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_swls_all)) {
  df_check_adjusted_swls_all_unlist <- 
    bind_rows(df_check_adjusted_swls_all_unlist, 
              as.data.frame(summary(df_check_adjusted_swls_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls_all[[i]])$Std_Coefficient))
}
df_check_adjusted_swls_all_unlist <- df_check_adjusted_swls_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "swls", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# meaning
df_check_adjusted_meaning_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ meaning + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_meaning_all_unlist <- as.data.frame(summary(df_check_adjusted_meaning_all[[1]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning_all[[1]])$Std_Coefficient)
for (i in 2:length(df_check_adjusted_meaning_all)) {
  df_check_adjusted_meaning_all_unlist <- 
    bind_rows(df_check_adjusted_meaning_all_unlist, 
              as.data.frame(summary(df_check_adjusted_meaning_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning_all[[i]])$Std_Coefficient))
}
df_check_adjusted_meaning_all_unlist <- df_check_adjusted_meaning_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "meaning", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# selfes
df_check_adjusted_selfes_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ selfes + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_selfes_all_unlist <- as.data.frame(summary(df_check_adjusted_selfes_all[[1]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes_all[[1]])$Std_Coefficient)
for (i in 2:length(df_check_adjusted_selfes_all)) {
  df_check_adjusted_selfes_all_unlist <- 
    bind_rows(df_check_adjusted_selfes_all_unlist, 
              as.data.frame(summary(df_check_adjusted_selfes_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes_all[[i]])$Std_Coefficient))
}
df_check_adjusted_selfes_all_unlist <- df_check_adjusted_selfes_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "selfes", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# concept
df_check_adjusted_concept_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ concept + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_concept_all_unlist <- as.data.frame(summary(df_check_adjusted_concept_all[[1]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept_all[[1]])$Std_Coefficient)
for (i in 2:length(df_check_adjusted_concept_all)) {
  df_check_adjusted_concept_all_unlist <- 
    bind_rows(df_check_adjusted_concept_all_unlist, 
              as.data.frame(summary(df_check_adjusted_concept_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept_all[[i]])$Std_Coefficient))
}
df_check_adjusted_concept_all_unlist <- df_check_adjusted_concept_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "concept", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

Does the relationship between the squared difference in one trait (current vs. ideal) and well-being aspects still hold if we control for the initial trait level?

Combine as one table:

kable(df_check_adjusted_swls_all_unlist %>% 
        filter(!term %in% c("Intercept", "initial")) %>% 
        select(outcome, d_swls = d, p_ls = p, sig_ls = sig) %>% 
        left_join(
          df_check_adjusted_meaning_all_unlist %>% 
            filter(!term %in% c("Intercept", "initial")) %>% 
            select(outcome, d_meaning = d, p_m = p, sig_m = sig)
        ) %>% 
          left_join(
            df_check_adjusted_selfes_all_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_selfes = d, p_se = p, sig_se = sig)
          ) %>% 
          left_join(
            df_check_adjusted_concept_all_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_concept = d, p_c = p, sig_c = sig)
          ), 
       digits = 3)
outcome d_swls p_ls sig_ls d_meaning p_m sig_m d_selfes p_se sig_se d_concept p_c sig_c
extraversion -0.228 0.000 *** -0.207 0.000 *** -0.259 0.000 *** -0.163 0.000 ***
agreeableness -0.142 0.000 *** -0.138 0.000 *** -0.210 0.000 *** -0.202 0.000 ***
conscientiousness -0.184 0.000 *** -0.144 0.000 *** -0.185 0.000 *** -0.120 0.000 ***
neuroticism -0.197 0.000 *** -0.198 0.000 *** -0.289 0.000 *** -0.186 0.000 ***
openness -0.107 0.000 *** -0.104 0.000 *** -0.121 0.000 *** -0.104 0.000 ***
sociability -0.187 0.000 *** -0.180 0.000 *** -0.230 0.000 *** -0.151 0.000 ***
assertiveness -0.148 0.000 *** -0.158 0.000 *** -0.144 0.000 *** -0.141 0.000 ***
energy -0.222 0.000 *** -0.171 0.000 *** -0.223 0.000 *** -0.142 0.000 ***
compassion -0.107 0.000 *** -0.070 0.006 ** -0.145 0.000 *** -0.160 0.000 ***
respectfulness -0.087 0.000 *** -0.082 0.000 *** -0.129 0.000 *** -0.103 0.000 ***
trust -0.105 0.000 *** -0.125 0.000 *** -0.162 0.000 *** -0.179 0.000 ***
organization -0.125 0.000 *** -0.109 0.000 *** -0.117 0.000 *** -0.080 0.000 ***
productiveness -0.196 0.000 *** -0.150 0.000 *** -0.195 0.000 *** -0.132 0.000 ***
responsibility -0.177 0.000 *** -0.122 0.000 *** -0.197 0.000 *** -0.142 0.000 ***
anxiety -0.150 0.000 *** -0.142 0.000 *** -0.205 0.000 *** -0.124 0.000 ***
depression -0.220 0.000 *** -0.213 0.000 *** -0.331 0.000 *** -0.173 0.000 ***
volatility -0.164 0.000 *** -0.168 0.000 *** -0.198 0.000 *** -0.175 0.000 ***
curiosity -0.134 0.000 *** -0.100 0.000 *** -0.121 0.000 *** -0.103 0.000 ***
aesthetic -0.033 0.196 -0.061 0.015 * -0.048 0.056 -0.061 0.015 *
imagination -0.153 0.000 *** -0.133 0.000 *** -0.160 0.000 *** -0.118 0.000 ***

Almost all effects significant at the p < .001 level when we include all time points at once. Somewhat stronger effects for neuroticism and extraversion.


6.2 H2: Well-being - latent change (H5 in paper)

Both intervention groups (but not the control group between T1 and T2) will increase in all four psychological well-being indicators.

We will test the mean-level difference between baseline and follow up using latent change models. Our main focus will be changes from T1 to T2 and we will check in a second set of models whether any changes persist from T2 to T3.

6.2.1 Intervention effects (changes from T1 to T2)

6.2.1.1 Life satisfaction

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_swls_hyp2 <- '
swls_t1 =~ 1*sw06_01_t1 + lamb2*sw06_02_t1 + lamb3*sw06_03_t1 + lamb4*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + lamb2*sw06_02_t2 + lamb3*sw06_03_t2 + lamb4*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ 1           # This estimates the intercept of the change score 
swls_t1 ~ 1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ swls_t1     # This estimates the variance of the swls_t1 
swls_t1 ~~ d_swls_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ res1*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ res2*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ res3*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ res4*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ res1*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ res2*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ res3*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ res4*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ m3*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ m4*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ m3*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ m4*1     # This estimates the intercept of X4 at T2
'
fit_mi_lcs_swls_hyp2 <- lavaan(mi_lcs_swls_hyp2, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_swls_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_swls_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
673 19 13061.93 13147.66 0.977 0.065 0.03
# parameters of interest
params_lcs_swls_hyp2 <- broom::tidy(fit_mi_lcs_swls_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("swls_t2 ~ swls_t1", "d_swls_1 =~ swls_t2", "swls_t1 ~~ d_swls_1", # change parameters
                           "d_swls_1 ~1 ", "swls_t1 ~1 ", "", # means
                           "d_swls_1 ~~ d_swls_1")) # variances
kable(params_lcs_swls_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
swls_t2 ~ swls_t1 1.000 1.000 1.000 0.984 NA NA
d_swls_1 =~ swls_t2 1.000 1.000 1.000 0.653 NA NA
d_swls_1 ~1 0.271 0.207 0.335 0.413 8.324 0
swls_t1 ~1 2.685 2.598 2.772 2.716 60.416 0
d_swls_1 ~~ d_swls_1 0.431 0.330 0.532 1.000 8.360 0
swls_t1 ~~ d_swls_1 -0.199 -0.271 -0.127 -0.307 -5.440 0

Plot model:

semPaths(fit_mi_lcs_swls_hyp2, what="est", 
         sizeLat = 7, sizeMan = 7, edge.label.cex = .75, intercepts = T, edge.color="black")

Significantly higher life satisfaction at the post test, b = 0.271, p = 0. Those with initially higher levels of life satisfaction (at T1) change to a lesser degree.

What happens in the waitlist control group during this time?

Fit model:

Show the code
fit_mi_lcs_swls_hyp2_cg <- lavaan(mi_lcs_swls_hyp2, data=df_sbsa2_wide_wb %>% filter(rando=="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_swls_hyp2_cg, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_swls_hyp2_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
175 19 3244.162 3304.293 0.978 0.071 0.037
# parameters of interest
params_lcs_swls_hyp2_cg <- broom::tidy(fit_mi_lcs_swls_hyp2_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("swls_t2 ~ swls_t1", "d_swls_1 =~ swls_t2", "swls_t1 ~~ d_swls_1", # change parameters
                           "d_swls_1 ~1 ", "swls_t1 ~1 ", "", # means
                           "d_swls_1 ~~ d_swls_1")) # variances
kable(params_lcs_swls_hyp2_cg, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
swls_t2 ~ swls_t1 1.000 1.000 1.000 0.979 NA NA
d_swls_1 =~ swls_t2 1.000 1.000 1.000 0.481 NA NA
d_swls_1 ~1 0.251 0.136 0.365 0.467 4.276 0.000
swls_t1 ~1 2.634 2.455 2.812 2.412 28.873 0.000
d_swls_1 ~~ d_swls_1 0.287 0.125 0.450 1.000 3.472 0.001
swls_t1 ~~ d_swls_1 -0.117 -0.254 0.020 -0.200 -1.680 0.093

Life satisfaction changes in the control group not significant at preregistered alpha-level (.001), b = 0.251, p = 0. Still a positive effect, but weaker effect size than in intervention group.

6.2.1.2 Meaning in life

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_meaning_hyp2 <- '
meaning_t1 =~ 1*meaning_par1_t1 + lamb2*meaning_par2_t1 + lamb3*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + lamb2*meaning_par2_t2 + lamb3*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1              # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ 1              # This estimates the intercept of the change score 
meaning_t1 ~ 1               # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ meaning_t1     # This estimates the variance of the meaning_t1 
meaning_t1 ~~ d_meaning_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ res1*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ res2*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ res3*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ res1*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ res2*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ res3*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_meaning_hyp2 <- lavaan(mi_lcs_meaning_hyp2, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_meaning_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_meaning_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
673 15 9545.085 9612.761 0.992 0.055 0.025
# parameters of interest
params_lcs_meaning_hyp2 <- broom::tidy(fit_mi_lcs_meaning_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("meaning_t2 ~ meaning_t1", "d_meaning_1 =~ meaning_t2", "meaning_t1 ~~ d_meaning_1", # change parameters
                           "d_meaning_1 ~1 ", "meaning_t1 ~1 ", "", # means
                           "d_meaning_1 ~~ d_meaning_1")) # variances

kable(params_lcs_meaning_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
meaning_t2 ~ meaning_t1 1.000 1.000 1.000 1.017 NA NA
d_meaning_1 =~ meaning_t2 1.000 1.000 1.000 0.698 NA NA
d_meaning_1 ~1 0.212 0.149 0.274 0.317 6.646 0
meaning_t1 ~1 3.209 3.123 3.294 3.292 73.486 0
d_meaning_1 ~~ d_meaning_1 0.447 0.339 0.555 1.000 8.137 0
meaning_t1 ~~ d_meaning_1 -0.239 -0.313 -0.166 -0.368 -6.346 0

Participants improved significantly in meaning in life across time, b = 0.212, p = 0.

What happens in the waitlist control group during this time?

Fit model:

Show the code
fit_mi_lcs_meaning_hyp2_cg <- lavaan(mi_lcs_meaning_hyp2, data=df_sbsa2_wide_wb %>% filter(rando=="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_meaning_hyp2_cg, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_meaning_hyp2_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
175 15 2481.44 2528.912 1 0 0.033
# parameters of interest
params_lcs_meaning_hyp2_cg <- broom::tidy(fit_mi_lcs_meaning_hyp2_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("meaning_t2 ~ meaning_t1", "d_meaning_1 =~ meaning_t2", "meaning_t1 ~~ d_meaning_1", # change parameters
                           "d_meaning_1 ~1 ", "meaning_t1 ~1 ", "", # means
                           "d_meaning_1 ~~ d_meaning_1")) # variances
kable(params_lcs_meaning_hyp2_cg, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
meaning_t2 ~ meaning_t1 1.000 1.000 1.000 0.990 NA NA
d_meaning_1 =~ meaning_t2 1.000 1.000 1.000 0.662 NA NA
d_meaning_1 ~1 0.292 0.161 0.422 0.413 4.390 0.000
meaning_t1 ~1 3.190 3.008 3.373 3.021 34.294 0.000
d_meaning_1 ~~ d_meaning_1 0.498 0.317 0.680 1.000 5.378 0.000
meaning_t1 ~~ d_meaning_1 -0.238 -0.403 -0.073 -0.319 -2.832 0.005

Meaning increases significantly in the control group, b = 0.292, p = 0, although with a somewhat weaker effect size than in the intervention group.

6.2.1.3 Self-esteem

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_selfes_hyp2 <- '
selfes_t1 =~ 1*selfes_par1_t1 + lamb2*selfes_par2_t1 + lamb3*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + lamb2*selfes_par2_t2 + lamb3*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1             # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ 1             # This estimates the intercept of the change score 
selfes_t1 ~ 1              # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ selfes_t1     # This estimates the variance of the selfes_t1 
selfes_t1 ~~ d_selfes_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ res1*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ res2*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ res3*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ res1*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ res2*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ res3*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_selfes_hyp2 <- lavaan(mi_lcs_selfes_hyp2, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_selfes_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_selfes_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
673 15 7206.632 7274.308 1 0 0.016
# parameters of interest
params_lcs_selfes_hyp2 <- broom::tidy(fit_mi_lcs_selfes_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("selfes_t2 ~ selfes_t1", "d_selfes_1 =~ selfes_t2", "selfes_t1 ~~ d_selfes_1", # change parameters
                           "d_selfes_1 ~1 ", "selfes_t1 ~1 ", "", # means
                           "d_selfes_1 ~~ d_selfes_1")) # variances

kable(params_lcs_selfes_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
selfes_t2 ~ selfes_t1 1.000 1.000 1.000 1.037 NA NA
d_selfes_1 =~ selfes_t2 1.000 1.000 1.000 0.670 NA NA
d_selfes_1 ~1 0.263 0.218 0.308 0.546 11.497 0
selfes_t1 ~1 3.540 3.476 3.604 4.745 108.567 0
d_selfes_1 ~~ d_selfes_1 0.233 0.183 0.283 1.000 9.126 0
selfes_t1 ~~ d_selfes_1 -0.136 -0.172 -0.099 -0.377 -7.278 0

Participants increased significantly in self-esteem between the two assessments, b = 0.263, p = 0.

What happens in the waitlist control group during this time?

Fit model:

Show the code
fit_mi_lcs_selfes_hyp2_cg <- lavaan(mi_lcs_selfes_hyp2, data=df_sbsa2_wide_wb %>% filter(rando=="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_selfes_hyp2_cg, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_selfes_hyp2_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
175 15 1724.661 1772.133 1 0 0.02
# parameters of interest
params_lcs_selfes_hyp2_cg <- broom::tidy(fit_mi_lcs_selfes_hyp2_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("selfes_t2 ~ selfes_t1", "d_selfes_1 =~ selfes_t2", "selfes_t1 ~~ d_selfes_1", # change parameters
                           "d_selfes_1 ~1 ", "selfes_t1 ~1 ", "", # means
                           "d_selfes_1 ~~ d_selfes_1")) # variances
kable(params_lcs_selfes_hyp2_cg, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
selfes_t2 ~ selfes_t1 1.000 1.000 1.000 0.989 NA NA
d_selfes_1 =~ selfes_t2 1.000 1.000 1.000 0.395 NA NA
d_selfes_1 ~1 0.187 0.122 0.253 0.587 5.606 0.000
selfes_t1 ~1 3.545 3.414 3.675 4.443 53.386 0.000
d_selfes_1 ~~ d_selfes_1 0.102 0.057 0.146 1.000 4.465 0.000
selfes_t1 ~~ d_selfes_1 -0.043 -0.089 0.002 -0.171 -1.888 0.059

Self-esteem changes in the control group not significant at preregistered alpha-level (.001), b = 0.187, p = 0. Still a positive effect, but weaker effect size than in intervention group.

6.2.1.4 Self concept clarity

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_concept_hyp2 <- '
concept_t1 =~ 1*concept_par1_t1 + lamb2*concept_par2_t1 + lamb3*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + lamb2*concept_par2_t2 + lamb3*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1              # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ 1              # This estimates the intercept of the change score 
concept_t1 ~ 1               # This estimates the intercept of concept_t1 
d_concept_1 ~~ d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ concept_t1     # This estimates the variance of the concept_t1 
concept_t1 ~~ d_concept_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ res1*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ res2*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ res3*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ res1*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ res2*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ res3*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_concept_hyp2 <- lavaan(mi_lcs_concept_hyp2, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_concept_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_concept_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
673 15 7401.241 7468.917 0.996 0.036 0.019
# parameters of interest
params_lcs_concept_hyp2 <- broom::tidy(fit_mi_lcs_concept_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("concept_t2 ~ concept_t1", "d_concept_1 =~ concept_t2", "concept_t1 ~~ d_concept_1", # change parameters
                           "d_concept_1 ~1 ", "concept_t1 ~1 ", "", # means
                           "d_concept_1 ~~ d_concept_1")) # variances

kable(params_lcs_concept_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
concept_t2 ~ concept_t1 1.000 1.000 1.000 1.021 NA NA
d_concept_1 =~ concept_t2 1.000 1.000 1.000 0.754 NA NA
d_concept_1 ~1 0.177 0.131 0.223 0.355 7.585 0
concept_t1 ~1 3.044 2.983 3.104 4.502 98.796 0
d_concept_1 ~~ d_concept_1 0.249 0.196 0.302 1.000 9.196 0
concept_t1 ~~ d_concept_1 -0.134 -0.170 -0.099 -0.397 -7.416 0

Self concept clarity improved significantly across time, b = 0.177, p = 0.

What happens in the waitlist control group during this time?

Fit model:

Show the code
fit_mi_lcs_concept_hyp2_cg <- lavaan(mi_lcs_concept_hyp2, data=df_sbsa2_wide_wb %>% filter(rando=="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_concept_hyp2_cg, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_concept_hyp2_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
175 15 1805.904 1853.376 0.991 0.065 0.026
# parameters of interest
params_lcs_concept_hyp2_cg <- broom::tidy(fit_mi_lcs_concept_hyp2_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("concept_t2 ~ concept_t1", "d_concept_1 =~ concept_t2", "concept_t1 ~~ d_concept_1", # change parameters
                           "d_concept_1 ~1 ", "concept_t1 ~1 ", "", # means
                           "d_concept_1 ~~ d_concept_1")) # variances
kable(params_lcs_concept_hyp2_cg, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
concept_t2 ~ concept_t1 1.000 1.000 1.000 0.971 NA NA
d_concept_1 =~ concept_t2 1.000 1.000 1.000 0.611 NA NA
d_concept_1 ~1 0.057 -0.028 0.143 0.118 1.317 0.188
concept_t1 ~1 3.122 2.992 3.251 4.056 47.175 0.000
d_concept_1 ~~ d_concept_1 0.235 0.096 0.373 1.000 3.324 0.001
concept_t1 ~~ d_concept_1 -0.099 -0.172 -0.027 -0.266 -2.676 0.007

Self concept clarity changes in the control group not significant at preregistered alpha-level (.001), b = 0.057, p = 0.188. Still a positive effect, but weaker effect size than in intervention group.

6.2.2 Follow-up effects (changes from T2 to T3)

6.2.2.1 Life satisfaction

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_swls_hyp2_fu <- '
swls_t2 =~ 1*sw06_01_t2 + lamb2*sw06_02_t2 + lamb3*sw06_03_t2 + lamb4*sw06_04_t2 # This specifies the measurement model for swls_t2 
swls_t3 =~ 1*sw06_01_t3 + lamb2*sw06_02_t3 + lamb3*sw06_03_t3 + lamb4*sw06_04_t3 # This specifies the measurement model for swls_t3 with the equality constrained factor loadings

swls_t3 ~ 1*swls_t2     # This parameter regresses swls_t3 perfectly on swls_t2
d_swls_1 =~ 1*swls_t3   # This defines the latent change score factor as measured perfectly by scores on swls_t3
swls_t3 ~ 0*1           # This line constrains the intercept of swls_t3 to 0
swls_t3 ~~ 0*swls_t3    # This fixes the variance of swls_t3 to 0

d_swls_1 ~ 1           # This estimates the intercept of the change score 
swls_t2 ~ 1            # This estimates the intercept of swls_t2 
d_swls_1 ~~ d_swls_1   # This estimates the variance of the change scores 
swls_t2 ~~ swls_t2     # This estimates the variance of the swls_t2 
swls_t2 ~~ d_swls_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t2 ~~ sw06_01_t3   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t2 ~~ sw06_02_t3   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t2 ~~ sw06_03_t3   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t2 ~~ sw06_04_t3   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t2 ~~ res1*sw06_01_t2   # This allows residual variance on indicator X1 at T1 
sw06_02_t2 ~~ res2*sw06_02_t2   # This allows residual variance on indicator X2 at T1
sw06_03_t2 ~~ res3*sw06_03_t2   # This allows residual variance on indicator X3 at T1
sw06_04_t2 ~~ res4*sw06_04_t2   # This allows residual variance on indicator X4 at T1

sw06_01_t3 ~~ res1*sw06_01_t3  # This allows residual variance on indicator X1 at T2 
sw06_02_t3 ~~ res2*sw06_02_t3  # This allows residual variance on indicator X2 at T2 
sw06_03_t3 ~~ res3*sw06_03_t3  # This allows residual variance on indicator X3 at T2
sw06_04_t3 ~~ res4*sw06_04_t3  # This allows residual variance on indicator X4 at T2

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t2 ~ m2*1     # This estimates the intercept of X2 at T1
sw06_03_t2 ~ m3*1     # This estimates the intercept of X3 at T1
sw06_04_t2 ~ m4*1     # This estimates the intercept of X4 at T1

sw06_01_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t3 ~ m2*1     # This estimates the intercept of X2 at T2
sw06_03_t3 ~ m3*1     # This estimates the intercept of X3 at T2
sw06_04_t3 ~ m4*1     # This estimates the intercept of X4 at T2
'
fit_mi_lcs_swls_hyp2_fu <- lavaan(mi_lcs_swls_hyp2_fu, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_swls_hyp2_fu, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_swls_hyp2_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
579 19 10808.9 10891.76 0.985 0.058 0.022
# parameters of interest
params_lcs_swls_hyp2_fu <- broom::tidy(fit_mi_lcs_swls_hyp2_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("swls_t3 ~ swls_t2", "d_swls_1 =~ swls_t3", "swls_t2 ~~ d_swls_1", # change parameters
                           "d_swls_1 ~1 ", "swls_t2 ~1 ", "", # means
                           "d_swls_1 ~~ d_swls_1")) # variances
kable(params_lcs_swls_hyp2_fu, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
swls_t3 ~ swls_t2 1.000 1.000 1.000 0.994 NA NA
d_swls_1 =~ swls_t3 1.000 1.000 1.000 0.532 NA NA
d_swls_1 ~1 0.110 0.051 0.169 0.202 3.657 0
swls_t2 ~1 2.966 2.874 3.059 2.926 63.139 0
d_swls_1 ~~ d_swls_1 0.294 0.184 0.405 1.000 5.227 0
swls_t2 ~~ d_swls_1 -0.141 -0.211 -0.071 -0.256 -3.966 0

Life satisfaction further increased from T2 to the T3 follow up, b = 0.11, p = 0.

6.2.2.2 Meaning in life

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_meaning_hyp2_fu <- '
meaning_t2 =~ 1*meaning_par1_t2 + lamb2*meaning_par2_t2 + lamb3*meaning_par3_t2 # This specifies the measurement model for meaning_t2 
meaning_t3 =~ 1*meaning_par1_t3 + lamb2*meaning_par2_t3 + lamb3*meaning_par3_t3 # This specifies the measurement model for meaning_t3 with the equality constrained factor loadings

meaning_t3 ~ 1*meaning_t2     # This parameter regresses meaning_t3 perfectly on meaning_t2
d_meaning_1 =~ 1*meaning_t3   # This defines the latent change score factor as measured perfectly by scores on meaning_t3
meaning_t3 ~ 0*1              # This line constrains the intercept of meaning_t3 to 0
meaning_t3 ~~ 0*meaning_t3    # This fixes the variance of meaning_t3 to 0

d_meaning_1 ~ 1              # This estimates the intercept of the change score 
meaning_t2 ~ 1               # This estimates the intercept of meaning_t2 
d_meaning_1 ~~ d_meaning_1   # This estimates the variance of the change scores 
meaning_t2 ~~ meaning_t2     # This estimates the variance of the meaning_t2 
meaning_t2 ~~ d_meaning_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t2 ~~ meaning_par1_t3   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t2 ~~ meaning_par2_t3   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t2 ~~ meaning_par3_t3   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t2 ~~ res1*meaning_par1_t2   # This allows residual variance on indicator X1 at T1 
meaning_par2_t2 ~~ res2*meaning_par2_t2   # This allows residual variance on indicator X2 at T1
meaning_par3_t2 ~~ res3*meaning_par3_t2   # This allows residual variance on indicator X3 at T1

meaning_par1_t3 ~~ res1*meaning_par1_t3  # This allows residual variance on indicator X1 at T2 
meaning_par2_t3 ~~ res2*meaning_par2_t3  # This allows residual variance on indicator X2 at T2 
meaning_par3_t3 ~~ res3*meaning_par3_t3  # This allows residual variance on indicator X3 at T2

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T1
meaning_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T1

meaning_par1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t3 ~ m2*1     # This estimates the intercept of X2 at T2
meaning_par3_t3 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_meaning_hyp2_fu <- lavaan(mi_lcs_meaning_hyp2_fu, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_meaning_hyp2_fu, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_meaning_hyp2_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
579 15 8150.359 8215.779 0.995 0.046 0.031
# parameters of interest
params_lcs_meaning_hyp2_fu <- broom::tidy(fit_mi_lcs_meaning_hyp2_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("meaning_t3 ~ meaning_t2", "d_meaning_1 =~ meaning_t3", "meaning_t2 ~~ d_meaning_1", # change parameters
                           "d_meaning_1 ~1 ", "meaning_t2 ~1 ", "", # means
                           "d_meaning_1 ~~ d_meaning_1")) # variances

kable(params_lcs_meaning_hyp2_fu, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
meaning_t3 ~ meaning_t2 1.000 1.000 1.000 0.964 NA NA
d_meaning_1 =~ meaning_t3 1.000 1.000 1.000 0.674 NA NA
d_meaning_1 ~1 0.150 0.080 0.219 0.210 4.197 0
meaning_t2 ~1 3.412 3.316 3.509 3.347 69.108 0
d_meaning_1 ~~ d_meaning_1 0.508 0.369 0.646 1.000 7.176 0
meaning_t2 ~~ d_meaning_1 -0.215 -0.297 -0.132 -0.296 -5.106 0

Meaning in life further increased from T2 to the T3 follow up, b = 0.15, p = 0.

6.2.2.3 Self-esteem

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_selfes_hyp2_fu <- '
selfes_t2 =~ 1*selfes_par1_t2 + lamb2*selfes_par2_t2 + lamb3*selfes_par3_t2 # This specifies the measurement model for selfes_t2 
selfes_t3 =~ 1*selfes_par1_t3 + lamb2*selfes_par2_t3 + lamb3*selfes_par3_t3 # This specifies the measurement model for selfes_t3 with the equality constrained factor loadings

selfes_t3 ~ 1*selfes_t2     # This parameter regresses selfes_t3 perfectly on selfes_t2
d_selfes_1 =~ 1*selfes_t3   # This defines the latent change score factor as measured perfectly by scores on selfes_t3
selfes_t3 ~ 0*1             # This line constrains the intercept of selfes_t3 to 0
selfes_t3 ~~ 0*selfes_t3    # This fixes the variance of selfes_t3 to 0

d_selfes_1 ~ 1             # This estimates the intercept of the change score 
selfes_t2 ~ 1              # This estimates the intercept of selfes_t2 
d_selfes_1 ~~ d_selfes_1   # This estimates the variance of the change scores 
selfes_t2 ~~ selfes_t2     # This estimates the variance of the selfes_t2 
selfes_t2 ~~ d_selfes_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t2 ~~ selfes_par1_t3   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t2 ~~ selfes_par2_t3   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t2 ~~ selfes_par3_t3   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t2 ~~ res1*selfes_par1_t2   # This allows residual variance on indicator X1 at T1 
selfes_par2_t2 ~~ res2*selfes_par2_t2   # This allows residual variance on indicator X2 at T1
selfes_par3_t2 ~~ res3*selfes_par3_t2   # This allows residual variance on indicator X3 at T1

selfes_par1_t3 ~~ res1*selfes_par1_t3  # This allows residual variance on indicator X1 at T2 
selfes_par2_t3 ~~ res2*selfes_par2_t3  # This allows residual variance on indicator X2 at T2 
selfes_par3_t3 ~~ res3*selfes_par3_t3  # This allows residual variance on indicator X3 at T2

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T1
selfes_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T1

selfes_par1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t3 ~ m2*1     # This estimates the intercept of X2 at T2
selfes_par3_t3 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_selfes_hyp2_fu <- lavaan(mi_lcs_selfes_hyp2_fu, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_selfes_hyp2_fu, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_selfes_hyp2_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
579 15 5982.84 6048.26 1 0 0.015
# parameters of interest
params_lcs_selfes_hyp2_fu <- broom::tidy(fit_mi_lcs_selfes_hyp2_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("selfes_t3 ~ selfes_t2", "d_selfes_1 =~ selfes_t3", "selfes_t2 ~~ d_selfes_1", # change parameters
                           "d_selfes_1 ~1 ", "selfes_t2 ~1 ", "", # means
                           "d_selfes_1 ~~ d_selfes_1")) # variances

kable(params_lcs_selfes_hyp2_fu, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
selfes_t3 ~ selfes_t2 1.000 1.000 1.000 0.973 NA NA
d_selfes_1 =~ selfes_t3 1.000 1.000 1.000 0.499 NA NA
d_selfes_1 ~1 0.052 0.014 0.090 0.143 2.697 0.007
selfes_t2 ~1 3.814 3.748 3.880 5.329 113.354 0.000
d_selfes_1 ~~ d_selfes_1 0.135 0.102 0.167 1.000 8.126 0.000
selfes_t2 ~~ d_selfes_1 -0.053 -0.081 -0.025 -0.201 -3.674 0.000

Self-esteem further increased from T2 to the T3 follow up, b = 0.052, p = 0.007.

6.2.2.4 Self concept clarity

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_concept_hyp2_fu <- '
concept_t2 =~ 1*concept_par1_t2 + lamb2*concept_par2_t2 + lamb3*concept_par3_t2 # This specifies the measurement model for concept_t2 
concept_t3 =~ 1*concept_par1_t3 + lamb2*concept_par2_t3 + lamb3*concept_par3_t3 # This specifies the measurement model for concept_t3 with the equality constrained factor loadings

concept_t3 ~ 1*concept_t2     # This parameter regresses concept_t3 perfectly on concept_t2
d_concept_1 =~ 1*concept_t3   # This defines the latent change score factor as measured perfectly by scores on concept_t3
concept_t3 ~ 0*1              # This line constrains the intercept of concept_t3 to 0
concept_t3 ~~ 0*concept_t3    # This fixes the variance of concept_t3 to 0

d_concept_1 ~ 1              # This estimates the intercept of the change score 
concept_t2 ~ 1               # This estimates the intercept of concept_t2 
d_concept_1 ~~ d_concept_1   # This estimates the variance of the change scores 
concept_t2 ~~ concept_t2     # This estimates the variance of the concept_t2 
concept_t2 ~~ d_concept_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t2 ~~ concept_par1_t3   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t2 ~~ concept_par2_t3   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t2 ~~ concept_par3_t3   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t2 ~~ res1*concept_par1_t2   # This allows residual variance on indicator X1 at T1 
concept_par2_t2 ~~ res2*concept_par2_t2   # This allows residual variance on indicator X2 at T1
concept_par3_t2 ~~ res3*concept_par3_t2   # This allows residual variance on indicator X3 at T1

concept_par1_t3 ~~ res1*concept_par1_t3  # This allows residual variance on indicator X1 at T2 
concept_par2_t3 ~~ res2*concept_par2_t3  # This allows residual variance on indicator X2 at T2 
concept_par3_t3 ~~ res3*concept_par3_t3  # This allows residual variance on indicator X3 at T2

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T1
concept_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T1

concept_par1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t3 ~ m2*1     # This estimates the intercept of X2 at T2
concept_par3_t3 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_concept_hyp2_fu <- lavaan(mi_lcs_concept_hyp2_fu, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_concept_hyp2_fu, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_concept_hyp2_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
579 15 6175.822 6241.241 0.996 0.042 0.019
# parameters of interest
params_lcs_concept_hyp2_fu <- broom::tidy(fit_mi_lcs_concept_hyp2_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("concept_t3 ~ concept_t2", "d_concept_1 =~ concept_t3", "concept_t2 ~~ d_concept_1", # change parameters
                           "d_concept_1 ~1 ", "concept_t2 ~1 ", "", # means
                           "d_concept_1 ~~ d_concept_1")) # variances

kable(params_lcs_concept_hyp2_fu, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
concept_t3 ~ concept_t2 1.000 1.000 1.000 0.969 NA NA
d_concept_1 =~ concept_t3 1.000 1.000 1.000 0.600 NA NA
d_concept_1 ~1 0.043 0.003 0.082 0.108 2.135 0.033
concept_t2 ~1 3.226 3.163 3.288 5.063 101.242 0.000
d_concept_1 ~~ d_concept_1 0.156 0.117 0.194 1.000 7.866 0.000
concept_t2 ~~ d_concept_1 -0.064 -0.091 -0.038 -0.257 -4.729 0.000

Self concept clarity further increased from T2 to the T3 follow up, b = 0.043, p = 0.033.

I also checked whether there are differences if I model the two intervention groups (self-improvement / self-acceptance) separately. Changes are more or less the same across the two groups.


6.3 H3: Distance between ideal- and current-self over time (H1 in paper)

The distance between ideal- and current-self will decrease in both intervention groups (but not in the control group between T1 and T2).

We will use two strategies to test this hypothesis. First, we will compute the Fisher z-transformed profile correlation between current- and ideal-self and test whether it increased across assessments. Second, we will test whether the squared difference between current- and ideal-self rating for each Big Five trait decreased across assessments. We will test mean-level differences in profile correlations and squared differences between baseline and follow up using mixed-effects models. Our main focus will be changes from T1 to T2 and we will check in a second set of models whether any changes persist from T2 to T3.

6.3.1 Profile similarity

Reshape to wide:

Show the code
# reshape to wide
df_sbsa2_wide_profdiff <- df_sbsa2 %>% 
  arrange(pid, time) %>% 
  select(pid, rando, time, profile_corr_item_z, profile_corr_facet_z, ends_with("_sqdiff")) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = -c(pid, rando, time))
6.3.1.1 Intervention effects (changes from T1 to T2)

Checking assumptions

# item-level profile correlation
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t1)) 

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t1)
W = 0.93322, p-value = 2.657e-15
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(profile_corr_item_z_t2) - df_sbsa2_wide_profdiff %>%     filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t1)
D = 0.078375, p-value = 6.384e-09
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t1))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 671 0.42 0.49   0.38    0.39 0.47 -1.09 3.39  4.48 0.81     2.34 0.02
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 575 0.56 0.49   0.53    0.54 0.51 -1.07 2.17  3.23 0.27     0.02 0.02
# facet-level profile correlation
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t1)) 

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t1)
W = 0.93724, p-value = 8.082e-15
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(profile_corr_facet_z_t2) - df_sbsa2_wide_profdiff %>%     filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t1)
D = 0.080938, p-value = 1.393e-09
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t1))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 672 0.35 0.66   0.29    0.31 0.64 -1.23 3.77     5 0.69     1.04 0.03
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 576 0.52 0.66   0.47    0.49 0.66 -1.34 3.09  4.43 0.37     0.02 0.03

Results summary:

t_profile_corr_item <- t.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2),
                              df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t1), 
                              paired = TRUE)
t_profile_corr_facet <- t.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2), 
                               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t1), 
                               paired = TRUE)

kable(bind_rows(tidy(t_profile_corr_item), tidy(t_profile_corr_facet)) %>% mutate(outcome = c("Item-level profile corr.", "Facet-level profile corr.")) %>% select(outcome, everything()), digits = 3)
outcome estimate statistic p.value parameter conf.low conf.high method alternative
Item-level profile corr. 0.131 8.684 0 571 0.101 0.160 Paired t-test two.sided
Facet-level profile corr. 0.169 8.395 0 573 0.129 0.208 Paired t-test two.sided
# effect sizes
d_profile_corr_item <- psych::cohen.d(profile_corr_item_z ~ time, data = df_sbsa2 %>% 
                                        filter(rando!="Waitlist-Control" & time %in% c(1,2)))
d_profile_corr_item$cohen.d
                        lower    effect     upper
profile_corr_item_z 0.1668914 0.2788659 0.3907299
d_profile_corr_facet <- psych::cohen.d(profile_corr_facet_z ~ time, data = df_sbsa2 %>% 
                                         filter(rando!="Waitlist-Control" & time %in% c(1,2)))
d_profile_corr_facet$cohen.d
                         lower    effect     upper
profile_corr_facet_z 0.1475916 0.2593992 0.3711035

Significantly higher profile correlations at the second measurement occasion, both for the item-level profile correlation and the facet-level profile correlations.

What happens in the waitlist control group during this time?

t_profile_corr_item_cg <- t.test(df_sbsa2_wide_profdiff %>% filter(rando=="Waitlist-Control") %>% pull(profile_corr_item_z_t2),
                              df_sbsa2_wide_profdiff %>% filter(rando=="Waitlist-Control") %>% pull(profile_corr_item_z_t1), 
                              paired = TRUE)
t_profile_corr_facet_cg <- t.test(df_sbsa2_wide_profdiff %>% filter(rando=="Waitlist-Control") %>% pull(profile_corr_facet_z_t2), 
                               df_sbsa2_wide_profdiff %>% filter(rando=="Waitlist-Control") %>% pull(profile_corr_facet_z_t1), 
                               paired = TRUE)

kable(bind_rows(tidy(t_profile_corr_item_cg), tidy(t_profile_corr_facet_cg)) %>% mutate(outcome = c("Item-level profile corr.", "Facet-level profile corr.")) %>% select(outcome, everything()), digits = 5)
outcome estimate statistic p.value parameter conf.low conf.high method alternative
Item-level profile corr. 0.10158 3.36943 0.00097 145 0.0420 0.16117 Paired t-test two.sided
Facet-level profile corr. 0.12900 3.24385 0.00146 145 0.0504 0.20760 Paired t-test two.sided
# effect sizes
d_profile_corr_item_cg <- psych::cohen.d(profile_corr_item_z ~ time, data = df_sbsa2 %>% 
                                        filter(rando=="Waitlist-Control" & time %in% c(1,2)))
d_profile_corr_item_cg$cohen.d
                          lower    effect     upper
profile_corr_item_z -0.02087351 0.1993958 0.4193518
d_profile_corr_facet_cg <- psych::cohen.d(profile_corr_facet_z ~ time, data = df_sbsa2 %>% 
                                         filter(rando=="Waitlist-Control" & time %in% c(1,2)))
d_profile_corr_facet_cg$cohen.d
                           lower    effect     upper
profile_corr_facet_z -0.04429333 0.1758341 0.3956873

Slightly higher higher profile correlations at the second measurement occasion also in the controlg group, although this is only significant at .001 for the item-level profile correlation but not for the facet-level profile correlations.

6.3.1.2 Follow-up effects (changes from T2 to T3)

Checking assumptions

# item-level profile correlation
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t3) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t2)
W = 0.91279, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t3) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(profile_corr_item_z_t3) - df_sbsa2_wide_profdiff %>%     filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t2)
D = 0.062819, p-value = 5.247e-05
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 575 0.56 0.49   0.53    0.54 0.51 -1.07 2.17  3.23 0.27     0.02 0.02
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t3))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 514 0.61 0.55   0.57    0.59 0.55 -1.22 3.34  4.56 0.48      1.4 0.02
# facet-level profile correlation
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t3) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t2)
W = 0.92574, p-value = 3.207e-15
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t3) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(profile_corr_facet_z_t3) - df_sbsa2_wide_profdiff %>%     filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t2)
D = 0.067574, p-value = 7.904e-06
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 576 0.52 0.66   0.47    0.49 0.66 -1.34 3.09  4.43 0.37     0.02 0.03
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t3))
   vars   n mean   sd median trimmed  mad  min  max range skew kurtosis   se
X1    1 514 0.59 0.72   0.54    0.56 0.71 -1.7 3.72  5.42 0.47     0.54 0.03

Results summary:

t_profile_corr_item_fu <- t.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t3), 
                                 df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2), 
                                 paired = TRUE)
t_profile_corr_facet_fu <- t.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t3), 
                                  df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2), 
                                  paired = TRUE)

kable(bind_rows(tidy(t_profile_corr_item_fu), tidy(t_profile_corr_facet_fu)) %>% mutate(outcome = c("Item-level profile corr.", "Facet-level profile corr.")) %>% select(outcome, everything()), digits = 3)
outcome estimate statistic p.value parameter conf.low conf.high method alternative
Item-level profile corr. 0.040 2.583 0.010 511 0.010 0.071 Paired t-test two.sided
Facet-level profile corr. 0.066 3.097 0.002 511 0.024 0.108 Paired t-test two.sided
# effect sizes
d_profile_corr_item_fu <- psych::cohen.d(profile_corr_item_z ~ time, data = df_sbsa2 %>% 
                                           filter(rando!="Waitlist-Control" & time %in% c(2,3)))
d_profile_corr_item_fu$cohen.d
                          lower    effect     upper
profile_corr_item_z -0.01900003 0.1000698 0.2190937
d_profile_corr_facet_fu <- psych::cohen.d(profile_corr_facet_z ~ time, data = df_sbsa2 %>% 
                                            filter(rando!="Waitlist-Control" & time %in% c(2,3)))
d_profile_corr_facet_fu$cohen.d
                           lower    effect     upper
profile_corr_facet_z -0.01257597 0.1064569 0.2254401

Profile correlations stay stable from the second measurement occasion to the third when evaluated at alpha=.001, both for the item-level profile correlations and the facet-level profile correlations. Slight increase if looking at effect sizes.

6.3.1.3 Summary plot
profile_df_plot <- df_sbsa2 %>% 
  select(pid, time, rando, profile_corr_item_z, profile_corr_facet_z) %>% 
  pivot_longer(-c(pid, time, rando), names_to = "itemfacet", values_to = "corr") %>% 
  filter(!is.na(corr)) %>% 
  mutate(itemfacet2 = fct_recode(itemfacet, "Item-level" = "profile_corr_item_z", "Facet-level" = "profile_corr_facet_z"),
         itemfacet2 = fct_reorder(itemfacet2, corr, .desc = F))

cowplot::plot_grid(
  ggplot(profile_df_plot %>% filter(rando!="Waitlist-Control")) + 
  aes(x = as.factor(time), y = corr) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  facet_wrap(vars(itemfacet2)) +
  labs(x = "Measurement Occasion", y = "Profile correlation", 
       title = "Distance between ideal- and current-self in intervention groups") + 
  theme_bw(),
  ggplot(profile_df_plot %>% filter(rando=="Waitlist-Control")) + 
  aes(x = as.factor(time), y = corr) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  facet_wrap(vars(itemfacet2)) +
  labs(x = "Measurement Occasion", y = "Profile correlation", 
       title = "Distance between ideal- and current-self in waitlist control group") + 
  theme_bw(),
  ncol = 1, align = "vt"
)

Significantly higher profile correlations at the second measurement occasion, both for the item-level profile correlation and the facet-level profile correlations. Further increases (but only slightly) at the T3 follow-up. However, we also see a pattern of increases in the waitlist control group although with higher uncertainty of estimates (smaller sample). We would not have expected that from T1 to T2, but only from T2 to T3.

6.3.2 Individual traits: squared differences

6.3.2.1 Intervention effects (changes from T1 to T2)

Checking assumptions

# extra
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t1))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(extra_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(extra_sqdiff_t1)
W = 0.90382, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(extra_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(extra_sqdiff_t1)
D = 0.12962, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t1))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 674 1.84 1.98   1.17     1.5 1.48   0 11.67 11.67 1.57     2.63 0.08
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 1.47 1.71   0.84    1.14 1.07   0 10.03 10.03 1.87     3.83 0.07
# agree
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t1))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(agree_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(agree_sqdiff_t1)
W = 0.75936, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(agree_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(agree_sqdiff_t1)
D = 0.16923, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t1))
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 673  0.5 0.81   0.17    0.33 0.25   0 7.56  7.56 3.64    20.07 0.03
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 0.39 0.83   0.11    0.24 0.16   0 12.84 12.84 7.93    97.34 0.03
# consc
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t1))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(consc_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(consc_sqdiff_t1)
W = 0.87992, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(consc_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(consc_sqdiff_t1)
D = 0.12582, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t1))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 674  1.7 2.03      1    1.31 1.32   0  16    16 2.08      6.1 0.08
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 1.46 1.85   0.84     1.1 1.15   0 14.06 14.06 2.19     6.64 0.08
# neuro
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t1))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(neuro_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(neuro_sqdiff_t1)
W = 0.88583, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(neuro_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(neuro_sqdiff_t1)
D = 0.14624, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t1))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 674 3.36 3.44   2.25    2.79 2.68   0  16    16 1.34     1.27 0.13
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 577 2.66 2.97   1.56    2.11 1.95   0  16    16 1.64      2.6 0.12
# openn
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t1))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(openn_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(openn_sqdiff_t1)
W = 0.63533, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(openn_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(openn_sqdiff_t1)
D = 0.19368, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t1))
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 673 0.47 0.92   0.11    0.27 0.16   0 9.51  9.51 4.59    29.24 0.04
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 576 0.39 0.69   0.11    0.23 0.16   0 6.25  6.25 4.03    22.73 0.03

Results summary:

mod_traits_sqdiff <- df_sbsa2_wide_profdiff %>% 
  filter(rando!="Waitlist-Control") %>% 
  select(-starts_with("profile"), -rando, -ends_with("_t3")) %>% 
  pivot_longer(-c(pid), 
               names_to = c("test", "time"), values_to = "score", 
               names_pattern = "(.*)_(t1|t2)") %>% 
  filter(!is.na(score)) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(t_tests = map(data, ~t.test(score ~ relevel(as.factor(time), "t2"), # need to relevel this to get T2-T1 diff (not sure why)
                                     data = .x, paired = TRUE))) %>% 
  pull(t_tests) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

mod_traits_unlist <- mod_traits_sqdiff[[1]] %>% tidy()
for (i in 2:length(mod_traits_sqdiff)) {
  mod_traits_unlist <- bind_rows(mod_traits_unlist, mod_traits_sqdiff[[i]] %>% tidy())
}

kable(mod_traits_unlist %>% mutate(outcome = sort(names(b5_vars))) %>% 
        select(outcome, everything()) %>% arrange(factor(outcome, levels = (names(b5_vars)))), digits = 3) # order by BFI traits
outcome estimate statistic p.value parameter conf.low conf.high method alternative
extraversion -0.372 -6.354 0.000 576 -0.487 -0.257 Paired t-test two.sided
agreeableness -0.097 -3.536 0.000 575 -0.151 -0.043 Paired t-test two.sided
conscientiousness -0.169 -2.890 0.004 576 -0.284 -0.054 Paired t-test two.sided
neuroticism -0.697 -6.865 0.000 576 -0.896 -0.498 Paired t-test two.sided
openness -0.076 -2.587 0.010 574 -0.134 -0.018 Paired t-test two.sided
sociability -0.782 -7.573 0.000 574 -0.985 -0.579 Paired t-test two.sided
assertiveness -0.239 -3.030 0.003 573 -0.394 -0.084 Paired t-test two.sided
energy -0.337 -3.541 0.000 575 -0.523 -0.150 Paired t-test two.sided
compassion -0.118 -2.769 0.006 575 -0.201 -0.034 Paired t-test two.sided
respectfulness -0.012 -0.321 0.749 572 -0.086 0.062 Paired t-test two.sided
trust -0.329 -4.856 0.000 574 -0.462 -0.196 Paired t-test two.sided
organization -0.149 -1.777 0.076 575 -0.314 0.016 Paired t-test two.sided
productiveness -0.453 -4.519 0.000 572 -0.650 -0.256 Paired t-test two.sided
responsibility -0.139 -2.065 0.039 573 -0.271 -0.007 Paired t-test two.sided
anxiety -0.681 -4.592 0.000 576 -0.972 -0.389 Paired t-test two.sided
depression -0.887 -7.570 0.000 574 -1.117 -0.657 Paired t-test two.sided
volatility -0.603 -4.782 0.000 576 -0.851 -0.355 Paired t-test two.sided
curiosity -0.044 -1.039 0.299 573 -0.128 0.040 Paired t-test two.sided
aesthetic -0.053 -1.359 0.175 572 -0.130 0.024 Paired t-test two.sided
imagination -0.215 -3.559 0.000 574 -0.334 -0.097 Paired t-test two.sided
# effect sizes
cohend_cust = function(outcome, df) {
  form = as.formula(paste0(outcome, " ~ time"))
  psych::cohen.d(form, data = df)
}

d_trait <- cohend_cust(paste0(str_trunc(names(b5_vars)[1], 5, ellipsis = ""), "_sqdiff"), 
                       df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(1,2)))
d_traits_unlist <- as_tibble(d_trait$cohen.d)
for (i in 2:length(names(b5_vars))) {
  d_trait <- cohend_cust(paste0(str_trunc(names(b5_vars)[i], 5, ellipsis = ""), "_sqdiff"), 
                         df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(1,2)))
  d_traits_unlist <- bind_rows(d_traits_unlist, as_tibble(d_trait$cohen.d))
}
kable(d_traits_unlist %>% mutate(outcome = names(b5_vars)) %>% select(outcome, everything()), digits = 3)
outcome lower effect upper
extraversion -0.310 -0.199 -0.088
agreeableness -0.247 -0.135 -0.024
conscientiousness -0.235 -0.124 -0.013
neuroticism -0.328 -0.217 -0.105
openness -0.212 -0.101 0.010
sociability -0.345 -0.233 -0.122
assertiveness -0.219 -0.108 0.003
energy -0.268 -0.157 -0.045
compassion -0.231 -0.120 -0.008
respectfulness -0.173 -0.062 0.050
trust -0.303 -0.191 -0.080
organization -0.202 -0.091 0.020
productiveness -0.286 -0.174 -0.063
responsibility -0.223 -0.112 0.000
anxiety -0.272 -0.160 -0.049
depression -0.351 -0.240 -0.128
volatility -0.283 -0.172 -0.060
curiosity -0.161 -0.049 0.062
aesthetic -0.178 -0.066 0.045
imagination -0.235 -0.124 -0.012

Significantly lower squared mean-level differences at the second measurement occasion for extraversion, agreeableness, and neuroticism (at .001). For conscientiousness and openness only at p < .01. On the level of the 15 BFI-2 facets, we find 8 significant effects (at .001) where squared mean-level differences were reduced. For example, pronounced effect for energy but no effect for assertiveness.

What happens in the waitlist control group during this time?

mod_traits_sqdiff_cg <- df_sbsa2_wide_profdiff %>% 
  filter(rando=="Waitlist-Control") %>% 
  select(-starts_with("profile"), -rando, -ends_with("_t3")) %>% 
  pivot_longer(-c(pid), 
               names_to = c("test", "time"), values_to = "score", 
               names_pattern = "(.*)_(t1|t2)") %>% 
  filter(!is.na(score)) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(t_tests = map(data, ~t.test(score ~ relevel(as.factor(time), "t2"), # need to relevel this to get T2-T1 diff (not sure why)
                                     data = .x, paired = TRUE))) %>% 
  pull(t_tests) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

mod_traits_unlist_cg <- mod_traits_sqdiff_cg[[1]] %>% tidy()
for (i in 2:length(mod_traits_sqdiff_cg)) {
  mod_traits_unlist_cg <- bind_rows(mod_traits_unlist_cg, mod_traits_sqdiff_cg[[i]] %>% tidy())
}

kable(mod_traits_unlist_cg %>% mutate(outcome = sort(names(b5_vars))) %>% 
        select(outcome, everything()) %>% arrange(factor(outcome, levels = (names(b5_vars)))), digits = 3) # order by BFI traits
outcome estimate statistic p.value parameter conf.low conf.high method alternative
extraversion -0.371 -2.622 0.010 145 -0.650 -0.091 Paired t-test two.sided
agreeableness -0.158 -2.381 0.019 145 -0.290 -0.027 Paired t-test two.sided
conscientiousness -0.347 -3.151 0.002 145 -0.565 -0.130 Paired t-test two.sided
neuroticism -0.600 -3.067 0.003 145 -0.986 -0.213 Paired t-test two.sided
openness -0.052 -1.042 0.299 145 -0.151 0.047 Paired t-test two.sided
sociability -0.451 -2.337 0.021 145 -0.833 -0.070 Paired t-test two.sided
assertiveness -0.375 -1.927 0.056 145 -0.759 0.010 Paired t-test two.sided
energy -0.495 -2.212 0.029 145 -0.937 -0.053 Paired t-test two.sided
compassion -0.268 -2.470 0.015 145 -0.482 -0.053 Paired t-test two.sided
respectfulness -0.092 -1.222 0.224 145 -0.242 0.057 Paired t-test two.sided
trust -0.213 -1.634 0.104 145 -0.470 0.045 Paired t-test two.sided
organization -0.556 -3.541 0.001 145 -0.867 -0.246 Paired t-test two.sided
productiveness -0.544 -3.182 0.002 145 -0.882 -0.206 Paired t-test two.sided
responsibility -0.304 -2.500 0.014 145 -0.545 -0.064 Paired t-test two.sided
anxiety -0.625 -2.144 0.034 145 -1.200 -0.049 Paired t-test two.sided
depression -0.745 -3.091 0.002 145 -1.222 -0.269 Paired t-test two.sided
volatility -0.596 -2.357 0.020 145 -1.095 -0.096 Paired t-test two.sided
curiosity -0.068 -1.089 0.278 145 -0.190 0.055 Paired t-test two.sided
aesthetic -0.036 -0.363 0.717 145 -0.232 0.160 Paired t-test two.sided
imagination -0.074 -0.569 0.570 145 -0.329 0.182 Paired t-test two.sided
# effect sizes
d_trait_cg <- cohend_cust(paste0(str_trunc(names(b5_vars)[1], 5, ellipsis = ""), "_sqdiff"), 
                       df_sbsa2 %>% filter(rando=="Waitlist-Control" & time %in% c(1,2)))
d_traits_unlist_cg <- as_tibble(d_trait_cg$cohen.d)
for (i in 2:length(names(b5_vars))) {
  d_trait_cg <- cohend_cust(paste0(str_trunc(names(b5_vars)[i], 5, ellipsis = ""), "_sqdiff"), 
                         df_sbsa2 %>% filter(rando=="Waitlist-Control" & time %in% c(1,2)))
  d_traits_unlist_cg <- bind_rows(d_traits_unlist_cg, as_tibble(d_trait_cg$cohen.d))
}
kable(d_traits_unlist_cg %>% mutate(outcome = names(b5_vars)) %>% select(outcome, everything()), digits = 3)
outcome lower effect upper
extraversion -0.415 -0.195 0.025
agreeableness -0.410 -0.190 0.030
conscientiousness -0.434 -0.214 0.007
neuroticism -0.380 -0.160 0.060
openness -0.310 -0.090 0.130
sociability -0.388 -0.169 0.051
assertiveness -0.366 -0.146 0.074
energy -0.410 -0.191 0.030
compassion -0.480 -0.260 -0.039
respectfulness -0.337 -0.118 0.102
trust -0.296 -0.076 0.143
organization -0.436 -0.216 0.004
productiveness -0.405 -0.185 0.035
responsibility -0.426 -0.206 0.014
anxiety -0.355 -0.135 0.085
depression -0.386 -0.166 0.054
volatility -0.354 -0.134 0.086
curiosity -0.322 -0.102 0.118
aesthetic -0.298 -0.079 0.141
imagination -0.261 -0.042 0.178

In the control group, significantly lower squared mean-level differences at the second measurement occasion only for facet organization (at .001). For extraversion, agreeableness, conscientiousness, and neuroticism only at p < .05 (as well as for 8 facets). However, in terms of effect sizes, relatively similar effects to intervention group.

6.3.2.2 Follow-up effects (changes from T2 to T3)

Checking assumptions

# extra
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(extra_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(extra_sqdiff_t2)
W = 0.91718, p-value = 3.875e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(extra_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(extra_sqdiff_t2)
D = 0.12883, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 1.47 1.71   0.84    1.14 1.07   0 10.03 10.03 1.87     3.83 0.07
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t3))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 514 1.37 1.65   0.69    1.06 0.94   0   9     9 1.84     3.81 0.07
# agree
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(agree_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(agree_sqdiff_t2)
W = 0.70258, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(agree_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(agree_sqdiff_t2)
D = 0.17613, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 0.39 0.83   0.11    0.24 0.16   0 12.84 12.84 7.93    97.34 0.03
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t3))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 514 0.36 0.68   0.11    0.23 0.16   0   9     9 6.09    59.52 0.03
# consc
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(consc_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(consc_sqdiff_t2)
W = 0.81404, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(consc_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(consc_sqdiff_t2)
D = 0.15513, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 1.46 1.85   0.84     1.1 1.15   0 14.06 14.06 2.19     6.64 0.08
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t3))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 514 1.35 1.81   0.69    0.98 0.96   0 11.67 11.67 2.39        7 0.08
# neuro
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(neuro_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(neuro_sqdiff_t2)
W = 0.9264, p-value = 3.804e-15
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(neuro_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(neuro_sqdiff_t2)
D = 0.13798, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 577 2.66 2.97   1.56    2.11 1.95   0  16    16 1.64      2.6 0.12
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t3))
   vars   n mean   sd median trimmed mad min max range skew kurtosis   se
X1    1 514 2.44 2.76   1.36    1.95 1.7   0  16    16 1.83     4.04 0.12
# openn
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(openn_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(openn_sqdiff_t2)
W = 0.7161, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(openn_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(openn_sqdiff_t2)
D = 0.19517, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 576 0.39 0.69   0.11    0.23 0.16   0 6.25  6.25 4.03    22.73 0.03
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t3))
   vars   n mean  sd median trimmed  mad min   max range skew kurtosis   se
X1    1 514 0.42 0.9   0.11    0.23 0.16   0 11.67 11.67 6.54    62.09 0.04

Results summary:

mod_traits_sqdiff_fu <- df_sbsa2_wide_profdiff %>% 
  filter(rando!="Waitlist-Control") %>% 
  select(-starts_with("profile"), -rando, -ends_with("_t1")) %>% 
  pivot_longer(-c(pid), 
               names_to = c("test", "time"), values_to = "score", 
               names_pattern = "(.*)_(t2|t3)") %>% 
  filter(!is.na(score)) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(t_tests = map(data, ~t.test(score ~ relevel(as.factor(time), "t3"), # need to relevel this to get T3-T2 diff (not sure why)
                                     data = .x, paired = TRUE))) %>% 
  pull(t_tests) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

mod_traits_unlist_fu <- mod_traits_sqdiff_fu[[1]] %>% tidy()
for (i in 2:length(mod_traits_sqdiff_fu)) {
  mod_traits_unlist_fu <- bind_rows(mod_traits_unlist_fu, mod_traits_sqdiff_fu[[i]] %>% tidy())
}

kable(mod_traits_unlist_fu %>% mutate(outcome = sort(names(b5_vars))) %>% 
        select(outcome, everything()) %>% arrange(factor(outcome, levels = (names(b5_vars)))), digits = 3) # order by BFI traits
outcome estimate statistic p.value parameter conf.low conf.high method alternative
extraversion -0.096 -1.820 0.069 511 -0.199 0.008 Paired t-test two.sided
agreeableness -0.007 -0.304 0.761 511 -0.053 0.038 Paired t-test two.sided
conscientiousness -0.086 -1.451 0.147 511 -0.203 0.031 Paired t-test two.sided
neuroticism -0.205 -2.573 0.010 511 -0.362 -0.049 Paired t-test two.sided
openness 0.030 1.064 0.288 511 -0.025 0.085 Paired t-test two.sided
sociability -0.138 -1.437 0.151 511 -0.326 0.050 Paired t-test two.sided
assertiveness -0.121 -1.553 0.121 511 -0.273 0.032 Paired t-test two.sided
energy -0.001 -0.007 0.995 511 -0.176 0.174 Paired t-test two.sided
compassion 0.003 0.083 0.934 511 -0.072 0.078 Paired t-test two.sided
respectfulness -0.032 -0.937 0.349 511 -0.098 0.035 Paired t-test two.sided
trust 0.005 0.097 0.923 511 -0.101 0.112 Paired t-test two.sided
organization -0.095 -1.083 0.279 511 -0.266 0.077 Paired t-test two.sided
productiveness -0.139 -1.506 0.133 511 -0.321 0.043 Paired t-test two.sided
responsibility -0.057 -0.838 0.403 511 -0.190 0.077 Paired t-test two.sided
anxiety -0.380 -2.893 0.004 511 -0.638 -0.122 Paired t-test two.sided
depression -0.130 -1.138 0.256 511 -0.356 0.095 Paired t-test two.sided
volatility -0.163 -1.670 0.095 511 -0.355 0.029 Paired t-test two.sided
curiosity 0.040 0.904 0.366 511 -0.047 0.127 Paired t-test two.sided
aesthetic 0.083 1.791 0.074 511 -0.008 0.175 Paired t-test two.sided
imagination -0.101 -1.670 0.096 511 -0.220 0.018 Paired t-test two.sided
# effect sizes
d_trait_fu <- cohend_cust(paste0(str_trunc(names(b5_vars)[1], 5, ellipsis = ""), "_sqdiff"), 
                       df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(2,3)))
d_traits_unlist_fu <- as_tibble(d_trait_fu$cohen.d)
for (i in 2:length(names(b5_vars))) {
  d_trait_fu <- cohend_cust(paste0(str_trunc(names(b5_vars)[i], 5, ellipsis = ""), "_sqdiff"), 
                         df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(2,3)))
  d_traits_unlist_fu <- bind_rows(d_traits_unlist_fu, as_tibble(d_trait_fu$cohen.d))
}
kable(d_traits_unlist_fu %>% mutate(outcome = names(b5_vars)) %>% select(outcome, everything()), digits = 3)
outcome lower effect upper
extraversion -0.179 -0.060 0.059
agreeableness -0.155 -0.037 0.082
conscientiousness -0.178 -0.059 0.060
neuroticism -0.194 -0.075 0.044
openness -0.086 0.033 0.152
sociability -0.163 -0.044 0.075
assertiveness -0.199 -0.080 0.039
energy -0.119 0.000 0.119
compassion -0.149 -0.030 0.089
respectfulness -0.185 -0.066 0.053
trust -0.116 0.002 0.121
organization -0.173 -0.054 0.065
productiveness -0.175 -0.056 0.063
responsibility -0.156 -0.037 0.082
anxiety -0.217 -0.098 0.021
depression -0.154 -0.035 0.084
volatility -0.180 -0.061 0.058
curiosity -0.107 0.012 0.131
aesthetic -0.043 0.076 0.195
imagination -0.186 -0.067 0.052

No significant further changes in the squared difference from the second to the third measurement occasion (at .001). For neuroticism (and anxiety) further decreases only at p < .01.

6.3.2.3 Summary plot

Traits/facets sorted by average size of squared differences - in the intervention groups from T1 to T2

sqdiff_df_plot <- df_sbsa2 %>% 
  filter(rando!="Waitlist-Control" & time %in% c(1,2)) %>% 
  select(pid, time, all_of(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"))) %>% 
  pivot_longer(-c(pid, time), names_to = "trait", values_to = "sqdiff") %>% 
  group_by(trait) %>% 
  mutate(cur_group_id()) %>% 
  ungroup() %>% 
  filter(!is.na(sqdiff)) %>% 
  mutate(trait2 = fct_recode(trait, !!! setNames(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"),
                                                 str_to_title(names(b5_vars)))),
         trait2 = fct_reorder(trait2, sqdiff, .desc = T))

plot_sqdiff <- ggplot(sqdiff_df_plot) + 
  aes(x = as.factor(time), y = sqdiff) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  ggforce::facet_wrap_paginate(~trait2, ncol=3, nrow=2) +
  labs(x = "Measurement Occasion", y = "Squared difference") + 
  theme_bw()

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 1)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 2)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 3)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 4)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 5)

For some of the facets, the distribution look very similar and differences over time are perhaps driven by outliers.

Traits/facets sorted by average size of squared differences - in the control group from T1 to T2

sqdiff_df_plot_cg <- df_sbsa2 %>% 
  filter(rando=="Waitlist-Control" & time %in% c(1,2)) %>% 
  select(pid, time, all_of(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"))) %>% 
  pivot_longer(-c(pid, time), names_to = "trait", values_to = "sqdiff") %>% 
  group_by(trait) %>% 
  mutate(cur_group_id()) %>% 
  ungroup() %>% 
  filter(!is.na(sqdiff)) %>% 
  mutate(trait2 = fct_recode(trait, !!! setNames(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"),
                                                 str_to_title(names(b5_vars)))),
         trait2 = fct_reorder(trait2, sqdiff, .desc = T))

plot_sqdiff_cg <- ggplot(sqdiff_df_plot_cg) + 
  aes(x = as.factor(time), y = sqdiff) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  ggforce::facet_wrap_paginate(~trait2, ncol=3, nrow=2) +
  labs(x = "Measurement Occasion", y = "Squared difference") + 
  theme_bw()

plot_sqdiff_cg + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 1)

plot_sqdiff_cg + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 2)

plot_sqdiff_cg + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 3)

plot_sqdiff_cg + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 4)

plot_sqdiff_cg + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 5)

Smaller changes but also quite substantial for some traits/facets (although not significant).

Traits/facets sorted by average size of squared differences - in the intervention groups from T2 to T3

sqdiff_df_plot_fu <- df_sbsa2 %>% 
  filter(rando!="Waitlist-Control" & time %in% c(2,3)) %>% 
  select(pid, time, all_of(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"))) %>% 
  pivot_longer(-c(pid, time), names_to = "trait", values_to = "sqdiff") %>% 
  group_by(trait) %>% 
  mutate(cur_group_id()) %>% 
  ungroup() %>% 
  filter(!is.na(sqdiff)) %>% 
  mutate(trait2 = fct_recode(trait, !!! setNames(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"),
                                                 str_to_title(names(b5_vars)))),
         trait2 = fct_reorder(trait2, sqdiff, .desc = T))

plot_sqdiff_fu <- ggplot(sqdiff_df_plot_fu) + 
  aes(x = as.factor(time), y = sqdiff) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  ggforce::facet_wrap_paginate(~trait2, ncol=3, nrow=2) +
  labs(x = "Measurement Occasion", y = "Squared difference") + 
  theme_bw()

plot_sqdiff_fu + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 1)

plot_sqdiff_fu + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 2)

plot_sqdiff_fu + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 3)

plot_sqdiff_fu + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 4)

plot_sqdiff_fu + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 5)

No substantial changes over time.


6.4 H4: Change goals and change in personality (current / ideal) in self-improvement group

Not specifically preregistered for study 2 because we were foremost interested in the moderation hypothesis (H6 in prereg / H2 in paper) and thought that it was somewhat redundant with these models of correlations with the change score. I still ran the models for study 2 here (without the control group and for changes between T1 and T2) in case the comparison with study 1 is of interest.

In the self-improvement group, there will be a correlation between change goals and change in current-self ratings but not change in ideal-self ratings.

We will test this one domain/facet at a time. We will use both general continuous change goal score as well as trait-specific change goals. To test this hypothesis, we will estimate the mean-level differences across time for both current and ideal trait ratings using latent change models and correlate change goals with the change variable from those models.

Reshape and split data set by intervention group:

Show the code
# from T1 to T2
df_sbsa2_wide_pers_sb <- df_sbsa2 %>% 
  filter(rando=="Self-Improvement" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07")), # facet-specific change goals
         sb06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sb07"), sb06_01)) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, sb06_01_t2))
# colnames(df_sbsa2_wide_pers_sb)

group_assign <- df_sbsa2 %>% select(pid, rando) %>% unique()

df_sbsa2_wide_pers_sb <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Improvement") %>% select(-rando, -ends_with("_t3")) %>%
  left_join(df_sbsa2_wide_pers_sb)

# follow-up, from T2 to T3 (for later models)
df_sbsa2_wide_pers_sb_fu <- df_sbsa2 %>% 
  filter(rando=="Self-Improvement" & time %in% c(2,3)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07")), # facet-specific change goals
         sb06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sb07"), sb06_01)) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, sb06_01_t2))
# colnames(df_sbsa2_wide_pers_sb)

df_sbsa2_wide_pers_sb_fu <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Improvement" & !is.na(valid_t2)) %>% select(-rando, -ends_with("_t1")) %>%
  left_join(df_sbsa2_wide_pers_sb_fu)

6.4.1 Big Five traits

6.4.1.1 Extraversion - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_hyp4 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_extra_curr_hyp4 <- lavaan(mi_lcs_extra_curr_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4616.485 4685.3 0.938 0.109 0.107
# parameters of interest
params_lcs_extra_curr_hyp4 <- broom::tidy(fit_mi_lcs_extra_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                     "d_extra_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                     "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.097 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.541 NA NA
d_extra_1 ~1 0.093 0.039 0.148 0.321 3.378 0.001
extra_t1 ~1 2.989 2.903 3.075 5.066 68.090 0.000
d_extra_1 ~~ d_extra_1 0.085 0.042 0.128 1.000 3.859 0.000
extra_t1 ~~ d_extra_1 -0.072 -0.110 -0.033 -0.417 -3.651 0.000
d_extra_1 ~~ sb06_01_t1 -0.026 -0.073 0.021 -0.088 -1.090 0.276
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

The correlation of the general change goal with the extraversion change score (current-self) is not significantly different from zero, r = -0.088, p = 0.276.

6.4.1.2 Extraversion - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_hyp4 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_extra_ideal_hyp4 <- lavaan(mi_lcs_extra_ideal_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4118.071 4186.886 0.993 0.025 0.045
# parameters of interest
params_lcs_extra_ideal_hyp4 <- broom::tidy(fit_mi_lcs_extra_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.976 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.628 NA NA
d_extra_1 ~1 -0.019 -0.063 0.024 -0.081 -0.877 0.380
extra_t1 ~1 3.682 3.615 3.749 9.893 107.796 0.000
d_extra_1 ~~ d_extra_1 0.057 0.023 0.092 1.000 3.271 0.001
extra_t1 ~~ d_extra_1 -0.025 -0.051 0.001 -0.283 -1.905 0.057
d_extra_1 ~~ sb06_01_t1 0.002 -0.043 0.047 0.009 0.094 0.925
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with extraversion change score (ideal-self) is not significantly different from zero, r = 0.009, p = 0.925.

6.4.1.3 Extraversion - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_specif_hyp4 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sb07_01_t1 + sb07_02_t1 + sb07_03_t1 # latent change goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_01_t1 ~~ sb07_01_t1
sb07_02_t1 ~~ sb07_02_t1
sb07_03_t1 ~~ sb07_03_t1

sb07_01_t1 ~ 1
sb07_02_t1 ~ 1
sb07_03_t1 ~ 1
'
fit_mi_lcs_extra_curr_specif_hyp4 <- lavaan(mi_lcs_extra_curr_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 6968.653 7064.229 0.877 0.124 0.144
# parameters of interest
params_lcs_extra_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.120 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.570 NA NA
d_extra_1 ~1 0.091 0.038 0.145 0.307 3.334 0.001
extra_t1 ~1 2.990 2.904 3.076 5.110 68.086 0.000
d_extra_1 ~~ d_extra_1 0.089 0.044 0.133 1.000 3.884 0.000
extra_t1 ~~ d_extra_1 -0.079 -0.120 -0.038 -0.454 -3.755 0.000
goals ~~ d_extra_1 -0.046 -0.117 0.025 -0.235 -1.264 0.206
goals ~~ goals 0.431 0.010 0.853 1.000 2.008 0.045

Correlation of specific, facet-level change goals with extraversion change score (current-self) is not significantly different from zero, r = -0.235, p = 0.206.

6.4.1.4 Extraversion - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_specif_hyp4 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sb07_01_t1 + sb07_02_t1 + sb07_03_t1 # latent change goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_01_t1 ~~ sb07_01_t1
sb07_02_t1 ~~ sb07_02_t1
sb07_03_t1 ~~ sb07_03_t1

sb07_01_t1 ~ 1
sb07_02_t1 ~ 1
sb07_03_t1 ~ 1
'
fit_mi_lcs_extra_ideal_specif_hyp4 <- lavaan(mi_lcs_extra_ideal_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 6472.111 6567.687 0.995 0.018 0.034
# parameters of interest
params_lcs_extra_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.977 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.631 NA NA
d_extra_1 ~1 -0.019 -0.062 0.024 -0.080 -0.872 0.383
extra_t1 ~1 3.682 3.615 3.749 9.909 107.814 0.000
d_extra_1 ~~ d_extra_1 0.057 0.023 0.092 1.000 3.301 0.001
extra_t1 ~~ d_extra_1 -0.026 -0.051 0.000 -0.286 -1.952 0.051
goals ~~ d_extra_1 0.016 -0.022 0.053 0.113 0.812 0.417
goals ~~ goals 0.329 -0.001 0.659 1.000 1.953 0.051

Correlation of specific, facet-level change goals with extraversion change score (ideal-self) is not significantly different from zero, r = 0.113, p = 0.417.

6.4.1.5 Agreeableness - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_hyp4 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_agree_curr_hyp4 <- lavaan(mi_lcs_agree_curr_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 3951.479 4020.293 0.999 0.011 0.05
# parameters of interest
params_lcs_agree_curr_hyp4 <- broom::tidy(fit_mi_lcs_agree_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                     "d_agree_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                     "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.070 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.530 NA NA
d_agree_1 ~1 0.020 -0.016 0.055 0.097 1.074 0.283
agree_t1 ~1 3.463 3.395 3.531 8.480 99.783 0.000
d_agree_1 ~~ d_agree_1 0.041 0.015 0.067 1.000 3.121 0.002
agree_t1 ~~ d_agree_1 -0.031 -0.054 -0.008 -0.376 -2.678 0.007
d_agree_1 ~~ sb06_01_t1 0.023 -0.009 0.054 0.110 1.383 0.167
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with agreeableness change score (current-self) is not significantly different from zero, r = 0.11, p = 0.167.

6.4.1.6 Agreeableness - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_hyp4 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_agree_ideal_hyp4 <- lavaan(mi_lcs_agree_ideal_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 3955.753 4024.568 0.992 0.031 0.029
# parameters of interest
params_lcs_agree_ideal_hyp4 <- broom::tidy(fit_mi_lcs_agree_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.054 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.646 NA NA
d_agree_1 ~1 -0.030 -0.074 0.014 -0.112 -1.354 0.176
agree_t1 ~1 3.769 3.700 3.839 8.516 106.115 0.000
d_agree_1 ~~ d_agree_1 0.074 0.041 0.107 1.000 4.357 0.000
agree_t1 ~~ d_agree_1 -0.047 -0.072 -0.022 -0.388 -3.640 0.000
d_agree_1 ~~ sb06_01_t1 0.009 -0.030 0.048 0.032 0.438 0.662
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with agreeableness change score (ideal-self) is not significantly different from zero, r = 0.032, p = 0.662.

6.4.1.7 Agreeableness - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_specif_hyp4 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sb07_04_t1 + sb07_05_t1 + sb07_06_t1 # latent change goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_04_t1 ~~ sb07_04_t1
sb07_05_t1 ~~ sb07_05_t1
sb07_06_t1 ~~ sb07_06_t1

sb07_04_t1 ~ 1
sb07_05_t1 ~ 1
sb07_06_t1 ~ 1
'
fit_mi_lcs_agree_curr_specif_hyp4 <- lavaan(mi_lcs_agree_curr_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 6266.535 6362.111 0.976 0.048 0.082
# parameters of interest
params_lcs_agree_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.083 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.549 NA NA
d_agree_1 ~1 0.020 -0.015 0.056 0.099 1.120 0.263
agree_t1 ~1 3.463 3.395 3.531 8.462 99.734 0.000
d_agree_1 ~~ d_agree_1 0.043 0.017 0.069 1.000 3.217 0.001
agree_t1 ~~ d_agree_1 -0.034 -0.058 -0.010 -0.399 -2.795 0.005
goals ~~ d_agree_1 -0.014 -0.051 0.023 -0.072 -0.728 0.467
goals ~~ goals 0.861 0.566 1.156 1.000 5.722 0.000

Correlation of specific, facet-level change goals with agreeableness change score (current-self) is not significantly different from zero, r = -0.072, p = 0.467.

6.4.1.8 Agreeableness - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_specif_hyp4 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sb07_04_t1 + sb07_05_t1 + sb07_06_t1 # latent change goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_04_t1 ~~ sb07_04_t1
sb07_05_t1 ~~ sb07_05_t1
sb07_06_t1 ~~ sb07_06_t1

sb07_04_t1 ~ 1
sb07_05_t1 ~ 1
sb07_06_t1 ~ 1
'
fit_mi_lcs_agree_ideal_specif_hyp4 <- lavaan(mi_lcs_agree_ideal_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 6269.691 6365.267 0.977 0.048 0.058
# parameters of interest
params_lcs_agree_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.055 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.647 NA NA
d_agree_1 ~1 -0.030 -0.074 0.014 -0.111 -1.347 0.178
agree_t1 ~1 3.769 3.700 3.839 8.518 106.129 0.000
d_agree_1 ~~ d_agree_1 0.074 0.040 0.107 1.000 4.338 0.000
agree_t1 ~~ d_agree_1 -0.047 -0.072 -0.022 -0.389 -3.642 0.000
goals ~~ d_agree_1 -0.004 -0.051 0.044 -0.014 -0.150 0.880
goals ~~ goals 0.866 0.570 1.162 1.000 5.738 0.000

Correlation of specific, facet-level change goals with agreeableness change score (ideal-self) is not significantly different from zero, r = -0.014, p = 0.88.

6.4.1.9 Conscientiousness - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_hyp4 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_consc_curr_hyp4 <- lavaan(mi_lcs_consc_curr_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4212.613 4281.428 0.993 0.043 0.059
# parameters of interest
params_lcs_consc_curr_hyp4 <- broom::tidy(fit_mi_lcs_consc_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                     "d_consc_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                     "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.991 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.529 NA NA
d_consc_1 ~1 0.103 0.047 0.160 0.251 3.574 0.000
consc_t1 ~1 3.378 3.287 3.469 4.396 72.808 0.000
d_consc_1 ~~ d_consc_1 0.168 0.078 0.258 1.000 3.673 0.000
consc_t1 ~~ d_consc_1 -0.079 -0.139 -0.019 -0.250 -2.569 0.010
d_consc_1 ~~ sb06_01_t1 0.022 -0.048 0.092 0.053 0.619 0.536
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with conscientiousness change score (current-self) is not significantly different from zero, r = 0.053, p = 0.536.

6.4.1.10 Conscientiousness - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_hyp4 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_consc_ideal_hyp4 <- lavaan(mi_lcs_consc_ideal_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 3574.92 3643.735 0.989 0.038 0.043
# parameters of interest
params_lcs_consc_ideal_hyp4 <- broom::tidy(fit_mi_lcs_consc_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.937 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.625 NA NA
d_consc_1 ~1 0.009 -0.034 0.052 0.034 0.411 0.681
consc_t1 ~1 4.319 4.257 4.382 10.868 135.542 0.000
d_consc_1 ~~ d_consc_1 0.070 0.040 0.100 1.000 4.626 0.000
consc_t1 ~~ d_consc_1 -0.024 -0.051 0.002 -0.229 -1.781 0.075
d_consc_1 ~~ sb06_01_t1 0.011 -0.030 0.053 0.043 0.538 0.590
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with conscientiousness change score (ideal-self) is not significantly different from zero, r = 0.043, p = 0.59.

6.4.1.11 Conscientiousness - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_specif_hyp4 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sb07_07_t1 + sb07_08_t1 + sb07_09_t1 # latent change goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_07_t1 ~~ sb07_07_t1
sb07_08_t1 ~~ sb07_08_t1
sb07_09_t1 ~~ sb07_09_t1

sb07_07_t1 ~ 1
sb07_08_t1 ~ 1
sb07_09_t1 ~ 1
'
fit_mi_lcs_consc_curr_specif_hyp4 <- lavaan(mi_lcs_consc_curr_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 6503.589 6599.165 0.918 0.133 0.239
# parameters of interest
params_lcs_consc_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.052 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.596 NA NA
d_consc_1 ~1 0.106 0.049 0.162 0.242 3.664 0.000
consc_t1 ~1 3.378 3.287 3.469 4.392 72.805 0.000
d_consc_1 ~~ d_consc_1 0.190 0.087 0.293 1.000 3.605 0.000
consc_t1 ~~ d_consc_1 -0.123 -0.196 -0.051 -0.368 -3.339 0.001
goals ~~ d_consc_1 -0.108 -0.197 -0.018 -0.213 -2.365 0.018
goals ~~ goals 1.341 1.034 1.648 1.000 8.555 0.000

Correlation of specific, facet-level change goals with conscientiousness change score (current-self) is significantly different from zero, r = -0.213, p = 0.018.

6.4.1.12 Conscientiousness - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_specif_hyp4 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sb07_07_t1 + sb07_08_t1 + sb07_09_t1 # latent change goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_07_t1 ~~ sb07_07_t1
sb07_08_t1 ~~ sb07_08_t1
sb07_09_t1 ~~ sb07_09_t1

sb07_07_t1 ~ 1
sb07_08_t1 ~ 1
sb07_09_t1 ~ 1
'
fit_mi_lcs_consc_ideal_specif_hyp4 <- lavaan(mi_lcs_consc_ideal_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5869.922 5965.498 0.999 0.008 0.031
# parameters of interest
params_lcs_consc_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.934 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.620 NA NA
d_consc_1 ~1 0.009 -0.034 0.052 0.035 0.423 0.672
consc_t1 ~1 4.319 4.257 4.382 10.815 135.500 0.000
d_consc_1 ~~ d_consc_1 0.070 0.040 0.100 1.000 4.622 0.000
consc_t1 ~~ d_consc_1 -0.023 -0.050 0.003 -0.222 -1.717 0.086
goals ~~ d_consc_1 -0.035 -0.089 0.019 -0.113 -1.255 0.209
goals ~~ goals 1.336 1.027 1.646 1.000 8.452 0.000

Correlation of specific, facet-level change goals with conscientiousness change score (ideal-self) is not significantly different from zero, r = -0.113, p = 0.209.

6.4.1.13 Neuroticism - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_hyp4 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_neuro_curr_hyp4 <- lavaan(mi_lcs_neuro_curr_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4449.298 4518.113 0.969 0.094 0.13
# parameters of interest
params_lcs_neuro_curr_hyp4 <- broom::tidy(fit_mi_lcs_neuro_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                     "d_neuro_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                     "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.069 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.586 NA NA
d_neuro_1 ~1 -0.180 -0.243 -0.117 -0.391 -5.623 0.000
neuro_t1 ~1 3.276 3.179 3.372 3.898 66.630 0.000
d_neuro_1 ~~ d_neuro_1 0.212 0.154 0.270 1.000 7.157 0.000
neuro_t1 ~~ d_neuro_1 -0.150 -0.214 -0.086 -0.388 -4.578 0.000
d_neuro_1 ~~ sb06_01_t1 -0.004 -0.073 0.064 -0.009 -0.123 0.902
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with neuroticism change score (current-self) is not significantly different from zero, r = -0.009, p = 0.902.

6.4.1.14 Neuroticism - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_hyp4 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_hyp4 <- lavaan(mi_lcs_neuro_ideal_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 3587.547 3656.362 1 0.007 0.039
# parameters of interest
params_lcs_neuro_ideal_hyp4 <- broom::tidy(fit_mi_lcs_neuro_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.949 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.765 NA NA
d_neuro_1 ~1 0.042 -0.011 0.096 0.115 1.550 0.121
neuro_t1 ~1 1.707 1.648 1.766 3.747 56.782 0.000
d_neuro_1 ~~ d_neuro_1 0.135 0.079 0.191 1.000 4.697 0.000
neuro_t1 ~~ d_neuro_1 -0.056 -0.099 -0.013 -0.334 -2.542 0.011
d_neuro_1 ~~ sb06_01_t1 -0.046 -0.099 0.008 -0.122 -1.665 0.096
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with neuroticism change score (ideal-self) is not significantly different from zero, r = -0.122, p = 0.096.

6.4.1.15 Neuroticism - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_specif_hyp4 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sb07_10_t1 + sb07_11_t1 + sb07_12_t1 # latent change goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_10_t1 ~~ sb07_10_t1
sb07_11_t1 ~~ sb07_11_t1
sb07_12_t1 ~~ sb07_12_t1

sb07_10_t1 ~ 1
sb07_11_t1 ~ 1
sb07_12_t1 ~ 1
'
fit_mi_lcs_neuro_curr_specif_hyp4 <- lavaan(mi_lcs_neuro_curr_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 6888.104 6983.681 0.911 0.138 0.242
# parameters of interest
params_lcs_neuro_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.152 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.690 NA NA
d_neuro_1 ~1 -0.178 -0.241 -0.115 -0.355 -5.556 0.000
neuro_t1 ~1 3.276 3.179 3.372 3.903 66.640 0.000
d_neuro_1 ~~ d_neuro_1 0.253 0.174 0.332 1.000 6.252 0.000
neuro_t1 ~~ d_neuro_1 -0.213 -0.287 -0.139 -0.505 -5.624 0.000
goals ~~ d_neuro_1 0.135 0.048 0.222 0.248 3.053 0.002
goals ~~ goals 1.176 0.842 1.511 1.000 6.896 0.000

The correlation of specific, facet-level change goals with neuroticism change score (current-self) is significantly different from zero, r = 0.248, p = 0.002.

6.4.1.16 Neuroticism - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_specif_hyp4 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sb07_10_t1 + sb07_11_t1 + sb07_12_t1 # latent change goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_10_t1 ~~ sb07_10_t1
sb07_11_t1 ~~ sb07_11_t1
sb07_12_t1 ~~ sb07_12_t1

sb07_10_t1 ~ 1
sb07_11_t1 ~ 1
sb07_12_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_specif_hyp4 <- lavaan(mi_lcs_neuro_ideal_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 6038.494 6134.07 0.995 0.023 0.048
# parameters of interest
params_lcs_neuro_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.939 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.749 NA NA
d_neuro_1 ~1 0.042 -0.011 0.096 0.116 1.546 0.122
neuro_t1 ~1 1.707 1.648 1.766 3.746 56.787 0.000
d_neuro_1 ~~ d_neuro_1 0.132 0.078 0.186 1.000 4.775 0.000
neuro_t1 ~~ d_neuro_1 -0.052 -0.094 -0.010 -0.314 -2.442 0.015
goals ~~ d_neuro_1 0.027 -0.036 0.090 0.068 0.847 0.397
goals ~~ goals 1.227 0.894 1.559 1.000 7.233 0.000

Correlation of specific, facet-level change goals with neuroticism change score (ideal-self) is not significantly different from zero, r = 0.068, p = 0.397.

6.4.1.17 Openness - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_hyp4 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_openn_curr_hyp4 <- lavaan(mi_lcs_openn_curr_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4166.092 4234.907 0.991 0.04 0.039
# parameters of interest
params_lcs_openn_curr_hyp4 <- broom::tidy(fit_mi_lcs_openn_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                     "d_openn_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                     "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.999 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.457 NA NA
d_openn_1 ~1 0.078 0.030 0.125 0.293 3.200 0.001
openn_t1 ~1 3.485 3.410 3.561 6.002 90.551 0.000
d_openn_1 ~~ d_openn_1 0.071 0.037 0.104 1.000 4.159 0.000
openn_t1 ~~ d_openn_1 -0.035 -0.068 -0.001 -0.226 -2.028 0.043
d_openn_1 ~~ sb06_01_t1 -0.016 -0.061 0.029 -0.059 -0.692 0.489
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with openness change score (current-self) is not significantly different from zero, r = -0.059, p = 0.489.

6.4.1.18 Openness - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_hyp4 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_openn_ideal_hyp4 <- lavaan(mi_lcs_openn_ideal_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4025.404 4094.219 0.985 0.042 0.039
# parameters of interest
params_lcs_openn_ideal_hyp4 <- broom::tidy(fit_mi_lcs_openn_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.027 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.517 NA NA
d_openn_1 ~1 0.016 -0.012 0.044 0.108 1.118 0.264
openn_t1 ~1 3.917 3.856 3.979 13.318 125.051 0.000
d_openn_1 ~~ d_openn_1 0.022 0.007 0.037 1.000 2.874 0.004
openn_t1 ~~ d_openn_1 -0.013 -0.027 0.000 -0.303 -1.907 0.056
d_openn_1 ~~ sb06_01_t1 0.003 -0.023 0.028 0.017 0.197 0.844
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with openness change score (ideal-self) is not significantly different from zero, r = 0.017, p = 0.844.

6.4.1.19 Openness - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_specif_hyp4 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sb07_13_t1 + sb07_14_t1 + sb07_15_t1 # latent change goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_13_t1 ~~ sb07_13_t1
sb07_14_t1 ~~ sb07_14_t1
sb07_15_t1 ~~ sb07_15_t1

sb07_13_t1 ~ 1
sb07_14_t1 ~ 1
sb07_15_t1 ~ 1
'
fit_mi_lcs_openn_curr_specif_hyp4 <- lavaan(mi_lcs_openn_curr_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 6309.866 6405.443 0.965 0.073 0.116
# parameters of interest
params_lcs_openn_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.009 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.468 NA NA
d_openn_1 ~1 0.078 0.031 0.126 0.291 3.237 0.001
openn_t1 ~1 3.485 3.410 3.561 6.009 90.613 0.000
d_openn_1 ~~ d_openn_1 0.072 0.038 0.106 1.000 4.176 0.000
openn_t1 ~~ d_openn_1 -0.039 -0.075 -0.004 -0.252 -2.176 0.030
goals ~~ d_openn_1 -0.028 -0.067 0.011 -0.130 -1.392 0.164
goals ~~ goals 0.628 0.416 0.840 1.000 5.801 0.000

The correlation of specific, facet-level change goals with openness change score (current-self) is not significantly different from zero, r = -0.13, p = 0.164.

6.4.1.20 Openness - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_specif_hyp4 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sb07_13_t1 + sb07_14_t1 + sb07_15_t1 # latent change goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_13_t1 ~~ sb07_13_t1
sb07_14_t1 ~~ sb07_14_t1
sb07_15_t1 ~~ sb07_15_t1

sb07_13_t1 ~ 1
sb07_14_t1 ~ 1
sb07_15_t1 ~ 1
'
fit_mi_lcs_openn_ideal_specif_hyp4 <- lavaan(mi_lcs_openn_ideal_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 6170.616 6266.192 0.977 0.051 0.06
# parameters of interest
params_lcs_openn_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.027 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.517 NA NA
d_openn_1 ~1 0.016 -0.012 0.044 0.109 1.132 0.258
openn_t1 ~1 3.917 3.856 3.979 13.331 125.069 0.000
d_openn_1 ~~ d_openn_1 0.022 0.007 0.037 1.000 2.884 0.004
openn_t1 ~~ d_openn_1 -0.013 -0.027 0.000 -0.303 -1.912 0.056
goals ~~ d_openn_1 -0.002 -0.025 0.021 -0.017 -0.177 0.860
goals ~~ goals 0.629 0.417 0.842 1.000 5.810 0.000

Correlation of specific, facet-level change goals with openness change score (ideal-self) is not significantly different from zero, r = -0.017, p = 0.86.

6.4.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create template:
facet_template <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_facet_1 ~~ ind_goal     # estimates the covariance/correlation with change goal variable

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # loop across 2 BFI versions (combined pre&post current/ideal)
  for (j in 5:length(bfi_versions)) {
    items = paste0(bfi_versions[[j]], item_nrs)
    # loop across 2 different goal operationalizations (sb06_01_t1 & sb07_XX_t1)
    for (k in 1:2) {
      if (k==1) {
        goal_op = "sb06_01_t1"
      } else{
        goal_op = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
      }
      template_filled <- str_replace_all(facet_template, 
                                         c("facet" = short_name,
                                           "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                           "ind_goal" = goal_op))
      facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
      # save to environment
      if (k==1) {
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp4")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp4")), facet_model_fit))
      } else{
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp4")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp4")), facet_model_fit))
      }
    }
  }
}  
6.4.2.1 Sociability - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7959.374 8043.481 0.912 0.1 0.094
# parameters of interest
params_lcs_socia_curr_hyp4 <- broom::tidy(fit_mi_lcs_socia_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.091 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.515 NA NA
d_socia_1 ~1 0.074 0.001 0.146 0.191 1.998 0.046
socia_t1 ~1 2.875 2.747 3.003 3.514 44.013 0.000
d_socia_1 ~~ d_socia_1 0.149 0.076 0.222 1.000 4.017 0.000
socia_t1 ~~ d_socia_1 -0.128 -0.196 -0.060 -0.405 -3.705 0.000
d_socia_1 ~~ sb06_01_t1 -0.026 -0.088 0.037 -0.065 -0.796 0.426
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

The correlation of the general change goal with the sociability change score (current-self) is significantly different from zero, r = -0.065, p = 0.426.

6.4.2.2 Sociability - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7791.993 7876.1 0.935 0.053 0.056
# parameters of interest
params_lcs_socia_ideal_hyp4 <- broom::tidy(fit_mi_lcs_socia_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.993 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.650 NA NA
d_socia_1 ~1 -0.033 -0.088 0.023 -0.120 -1.155 0.248
socia_t1 ~1 4.241 4.158 4.324 10.208 100.432 0.000
d_socia_1 ~~ d_socia_1 0.074 0.014 0.133 1.000 2.426 0.015
socia_t1 ~~ d_socia_1 -0.036 -0.070 -0.001 -0.317 -2.028 0.043
d_socia_1 ~~ sb06_01_t1 0.042 -0.012 0.096 0.153 1.531 0.126
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with sociability change score (ideal-self) is not significantly different from zero, r = 0.153, p = 0.126.

6.4.2.3 Sociability - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8102.304 8186.411 0.885 0.117 0.13
# parameters of interest
params_lcs_socia_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.127 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.561 NA NA
d_socia_1 ~1 0.075 0.002 0.147 0.184 2.025 0.043
socia_t1 ~1 2.876 2.748 3.004 3.526 44.021 0.000
d_socia_1 ~~ d_socia_1 0.165 0.082 0.248 1.000 3.887 0.000
socia_t1 ~~ d_socia_1 -0.153 -0.229 -0.077 -0.462 -3.944 0.000
d_socia_1 ~~ sb07_01_t1 -0.104 -0.200 -0.008 -0.203 -2.128 0.033
sb07_01_t1 ~~ sb07_01_t1 1.597 1.400 1.794 1.000 15.899 0.000

Correlation of specific, facet-level change goals with sociability change score (current-self) is significantly different from zero, r = -0.203, p = 0.033.

6.4.2.4 Sociability - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7941.183 8025.29 0.947 0.047 0.056
# parameters of interest
params_lcs_socia_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.975 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.613 NA NA
d_socia_1 ~1 -0.031 -0.086 0.025 -0.115 -1.071 0.284
socia_t1 ~1 4.241 4.158 4.323 10.068 100.472 0.000
d_socia_1 ~~ d_socia_1 0.070 0.012 0.128 1.000 2.360 0.018
socia_t1 ~~ d_socia_1 -0.030 -0.064 0.003 -0.273 -1.766 0.077
d_socia_1 ~~ sb07_01_t1 -0.042 -0.110 0.025 -0.126 -1.224 0.221
sb07_01_t1 ~~ sb07_01_t1 1.597 1.400 1.794 1.000 15.899 0.000

The correlation of specific, facet-level change goals with the anxiety change score (ideal-self) is not significantly different from zero, r = -0.126, p = 0.221.

6.4.2.5 Assertiveness - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8179.331 8263.438 0.959 0.061 0.064
# parameters of interest
params_lcs_asser_curr_hyp4 <- broom::tidy(fit_mi_lcs_asser_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.035 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.492 NA NA
d_asser_1 ~1 0.060 0.011 0.109 0.220 2.416 0.016
asser_t1 ~1 3.093 2.973 3.213 5.362 50.389 0.000
d_asser_1 ~~ d_asser_1 0.075 0.014 0.136 1.000 2.425 0.015
asser_t1 ~~ d_asser_1 -0.049 -0.092 -0.005 -0.307 -2.201 0.028
d_asser_1 ~~ sb06_01_t1 -0.019 -0.064 0.025 -0.069 -0.848 0.397
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with assertiveness change score (current-self) is not significantly different from zero, r = -0.069, p = 0.397.

6.4.2.6 Assertiveness - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7876.725 7960.832 0.947 0.047 0.048
# parameters of interest
params_lcs_asser_ideal_hyp4 <- broom::tidy(fit_mi_lcs_asser_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.971 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.623 NA NA
d_asser_1 ~1 -0.005 -0.044 0.035 -0.024 -0.237 0.813
asser_t1 ~1 4.145 4.064 4.226 13.421 100.252 0.000
d_asser_1 ~~ d_asser_1 0.039 -0.009 0.087 1.000 1.604 0.109
asser_t1 ~~ d_asser_1 -0.017 -0.041 0.008 -0.274 -1.341 0.180
d_asser_1 ~~ sb06_01_t1 -0.014 -0.056 0.029 -0.067 -0.629 0.530
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with assertiveness change score (ideal-self) is not significantly different from zero, r = -0.067, p = 0.53.

6.4.2.7 Assertiveness - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8341.572 8425.679 0.925 0.084 0.088
# parameters of interest
params_lcs_asser_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.046 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.502 NA NA
d_asser_1 ~1 0.060 0.011 0.109 0.216 2.394 0.017
asser_t1 ~1 3.093 2.973 3.213 5.363 50.407 0.000
d_asser_1 ~~ d_asser_1 0.077 0.015 0.139 1.000 2.431 0.015
asser_t1 ~~ d_asser_1 -0.053 -0.098 -0.007 -0.330 -2.285 0.022
d_asser_1 ~~ sb07_02_t1 -0.068 -0.130 -0.006 -0.189 -2.134 0.033
sb07_02_t1 ~~ sb07_02_t1 1.688 1.496 1.881 1.000 17.182 0.000

Correlation of specific, facet-level change goals with assertiveness change score (current-self) is significantly different from zero, r = -0.189, p = 0.033.

6.4.2.8 Assertiveness - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8043.873 8127.98 0.948 0.046 0.048
# parameters of interest
params_lcs_asser_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.975 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.630 NA NA
d_asser_1 ~1 -0.005 -0.044 0.034 -0.024 -0.241 0.810
asser_t1 ~1 4.145 4.064 4.226 13.610 100.283 0.000
d_asser_1 ~~ d_asser_1 0.039 -0.009 0.086 1.000 1.604 0.109
asser_t1 ~~ d_asser_1 -0.017 -0.042 0.008 -0.282 -1.350 0.177
d_asser_1 ~~ sb07_02_t1 0.010 -0.038 0.058 0.039 0.405 0.686
sb07_02_t1 ~~ sb07_02_t1 1.688 1.496 1.881 1.000 17.182 0.000

Correlation of specific, facet-level change goals with assertiveness change score (ideal-self) is not significantly different from zero, r = 0.039, p = 0.686.

6.4.2.9 Energy - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8355.963 8440.07 0.958 0.055 0.071
# parameters of interest
params_lcs_energ_curr_hyp4 <- broom::tidy(fit_mi_lcs_energ_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.087 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.502 NA NA
d_energ_1 ~1 -0.056 -0.095 -0.016 -0.361 -2.761 0.006
energ_t1 ~1 2.770 2.662 2.878 8.314 50.244 0.000
d_energ_1 ~~ d_energ_1 0.024 -0.002 0.049 1.000 1.816 0.069
energ_t1 ~~ d_energ_1 -0.020 -0.041 0.000 -0.398 -1.944 0.052
d_energ_1 ~~ sb06_01_t1 0.016 -0.016 0.048 0.103 0.976 0.329
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with energy change score (current-self) is not significantly different from zero, r = 0.103, p = 0.329.

6.4.2.10 Energy - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7752.633 7836.74 0.93 0.045 0.05
# parameters of interest
params_lcs_energ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_energ_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.804 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.565 NA NA
d_energ_1 ~1 0.039 0.001 0.077 0.319 2.034 0.042
energ_t1 ~1 2.242 2.124 2.360 12.835 37.328 0.000
d_energ_1 ~~ d_energ_1 0.015 -0.007 0.037 1.000 1.347 0.178
energ_t1 ~~ d_energ_1 0.001 -0.009 0.010 0.037 0.163 0.870
d_energ_1 ~~ sb06_01_t1 0.000 -0.030 0.031 0.001 0.008 0.993
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with energy change score (ideal-self) is not significantly different from zero, r = 0.001, p = 0.993.

6.4.2.11 Energy - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8500.009 8584.116 0.89 0.091 0.104
# parameters of interest
params_lcs_energ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.076 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.485 NA NA
d_energ_1 ~1 -0.055 -0.095 -0.016 -0.368 -2.736 0.006
energ_t1 ~1 2.770 2.662 2.878 8.287 50.228 0.000
d_energ_1 ~~ d_energ_1 0.023 -0.002 0.047 1.000 1.797 0.072
energ_t1 ~~ d_energ_1 -0.019 -0.039 0.001 -0.376 -1.879 0.060
d_energ_1 ~~ sb07_03_t1 -0.001 -0.037 0.034 -0.007 -0.074 0.941
sb07_03_t1 ~~ sb07_03_t1 1.572 1.373 1.770 1.000 15.550 0.000

Correlation of specific, facet-level change goals with energy change score (current-self) is not significantly different from zero, r = -0.007, p = 0.941.

6.4.2.12 Energy - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7895.287 7979.394 0.939 0.042 0.05
# parameters of interest
params_lcs_energ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.804 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.564 NA NA
d_energ_1 ~1 0.039 0.002 0.077 0.320 2.043 0.041
energ_t1 ~1 2.242 2.124 2.360 12.830 37.323 0.000
d_energ_1 ~~ d_energ_1 0.015 -0.007 0.037 1.000 1.346 0.178
energ_t1 ~~ d_energ_1 0.001 -0.009 0.011 0.040 0.173 0.862
d_energ_1 ~~ sb07_03_t1 0.003 -0.030 0.035 0.016 0.153 0.879
sb07_03_t1 ~~ sb07_03_t1 1.572 1.373 1.770 1.000 15.550 0.000

Correlation of specific, facet-level change goals with energy change score (ideal-self) is not significantly different from zero, r = 0.016, p = 0.879.

6.4.2.13 Compassion - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8081.935 8166.042 0.965 0.044 0.049
# parameters of interest
params_lcs_compa_curr_hyp4 <- broom::tidy(fit_mi_lcs_compa_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.127 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.455 NA NA
d_compa_1 ~1 0.100 0.038 0.162 0.412 3.182 0.001
compa_t1 ~1 4.184 4.090 4.277 6.940 87.951 0.000
d_compa_1 ~~ d_compa_1 0.059 0.006 0.113 1.000 2.163 0.031
compa_t1 ~~ d_compa_1 -0.068 -0.116 -0.020 -0.465 -2.797 0.005
d_compa_1 ~~ sb06_01_t1 0.027 -0.025 0.079 0.109 1.014 0.311
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with compassion change score (current-self) is not significantly different from zero, r = 0.109, p = 0.311.

6.4.2.14 Compassion - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8200.707 8284.814 0.983 0.024 0.048
# parameters of interest
params_lcs_compa_ideal_hyp4 <- broom::tidy(fit_mi_lcs_compa_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.979 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.427 NA NA
d_compa_1 ~1 -0.040 -0.112 0.031 -0.180 -1.109 0.267
compa_t1 ~1 4.225 4.132 4.319 8.252 88.493 0.000
d_compa_1 ~~ d_compa_1 0.050 -0.031 0.131 1.000 1.203 0.229
compa_t1 ~~ d_compa_1 -0.019 -0.081 0.043 -0.168 -0.606 0.544
d_compa_1 ~~ sb06_01_t1 -0.030 -0.087 0.028 -0.131 -1.011 0.312
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with compassion change score (ideal-self) is not significantly different from zero, r = -0.131, p = 0.312.

6.4.2.15 Compassion - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8279.231 8363.338 0.925 0.067 0.079
# parameters of interest
params_lcs_compa_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.136 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.468 NA NA
d_compa_1 ~1 0.099 0.038 0.160 0.403 3.164 0.002
compa_t1 ~1 4.184 4.091 4.277 7.011 88.158 0.000
d_compa_1 ~~ d_compa_1 0.061 0.008 0.113 1.000 2.267 0.023
compa_t1 ~~ d_compa_1 -0.070 -0.117 -0.023 -0.479 -2.928 0.003
d_compa_1 ~~ sb07_04_t1 -0.010 -0.087 0.066 -0.031 -0.264 0.792
sb07_04_t1 ~~ sb07_04_t1 1.843 1.662 2.024 1.000 19.987 0.000

Correlation of specific, facet-level change goals with compassion change score (current-self) is not significantly different from zero, r = -0.031, p = 0.792.

6.4.2.16 Compassion - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8397.825 8481.932 0.914 0.055 0.067
# parameters of interest
params_lcs_compa_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.976 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.423 NA NA
d_compa_1 ~1 -0.041 -0.113 0.030 -0.185 -1.134 0.257
compa_t1 ~1 4.225 4.132 4.319 8.211 88.429 0.000
d_compa_1 ~~ d_compa_1 0.050 -0.032 0.132 1.000 1.188 0.235
compa_t1 ~~ d_compa_1 -0.018 -0.081 0.044 -0.160 -0.578 0.563
d_compa_1 ~~ sb07_04_t1 0.018 -0.070 0.107 0.060 0.403 0.687
sb07_04_t1 ~~ sb07_04_t1 1.843 1.662 2.024 1.000 19.987 0.000

Correlation of specific, facet-level change goals with compassion change score (ideal-self) is not significantly different from zero, r = 0.06, p = 0.687.

6.4.2.17 Respectfulness - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7006.72 7090.827 0.949 0.063 0.066
# parameters of interest
params_lcs_respe_curr_hyp4 <- broom::tidy(fit_mi_lcs_respe_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.165 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.638 NA NA
d_respe_1 ~1 0.017 -0.039 0.074 0.056 0.601 0.548
respe_t1 ~1 4.474 4.396 4.552 7.919 111.900 0.000
d_respe_1 ~~ d_respe_1 0.096 0.032 0.160 1.000 2.938 0.003
respe_t1 ~~ d_respe_1 -0.090 -0.155 -0.025 -0.514 -2.718 0.007
d_respe_1 ~~ sb06_01_t1 0.000 -0.051 0.052 0.001 0.013 0.990
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with respectfulness change score (current-self) is not significantly different from zero, r = 0.001, p = 0.99.

6.4.2.18 Respectfulness - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6614.559 6698.666 0.964 0.042 0.046
# parameters of interest
params_lcs_respe_ideal_hyp4 <- broom::tidy(fit_mi_lcs_respe_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.105 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.674 NA NA
d_respe_1 ~1 -0.001 -0.051 0.048 -0.005 -0.051 0.960
respe_t1 ~1 4.710 4.650 4.770 12.020 153.576 0.000
d_respe_1 ~~ d_respe_1 0.057 0.019 0.095 1.000 2.911 0.004
respe_t1 ~~ d_respe_1 -0.042 -0.077 -0.008 -0.454 -2.401 0.016
d_respe_1 ~~ sb06_01_t1 0.009 -0.037 0.055 0.036 0.367 0.714
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with respectfulness change score (ideal-self) is not significantly different from zero, r = 0.036, p = 0.714.

6.4.2.19 Respectfulness - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7196.438 7280.545 0.905 0.088 0.102
# parameters of interest
params_lcs_respe_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.198 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.684 NA NA
d_respe_1 ~1 0.020 -0.036 0.076 0.061 0.688 0.491
respe_t1 ~1 4.474 4.396 4.552 7.905 111.873 0.000
d_respe_1 ~~ d_respe_1 0.104 0.037 0.172 1.000 3.016 0.003
respe_t1 ~~ d_respe_1 -0.101 -0.169 -0.033 -0.551 -2.909 0.004
d_respe_1 ~~ sb07_05_t1 -0.066 -0.133 0.002 -0.150 -1.915 0.056
sb07_05_t1 ~~ sb07_05_t1 1.826 1.607 2.046 1.000 16.296 0.000

Correlation of specific, facet-level change goals with respectfulness change score (current-self) is not significantly different from zero, r = -0.15, p = 0.056.

6.4.2.20 Respectfulness - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6805.018 6889.125 0.961 0.044 0.052
# parameters of interest
params_lcs_respe_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.116 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.695 NA NA
d_respe_1 ~1 0.000 -0.049 0.049 0.001 0.012 0.990
respe_t1 ~1 4.710 4.650 4.770 12.065 153.595 0.000
d_respe_1 ~~ d_respe_1 0.059 0.020 0.098 1.000 2.993 0.003
respe_t1 ~~ d_respe_1 -0.045 -0.079 -0.010 -0.469 -2.506 0.012
d_respe_1 ~~ sb07_05_t1 -0.050 -0.111 0.011 -0.151 -1.591 0.112
sb07_05_t1 ~~ sb07_05_t1 1.826 1.607 2.046 1.000 16.296 0.000

The correlation of specific, facet-level change goals with the respectfulness change score (ideal-self) is not significantly different from zero, r = -0.151, p = 0.112.

6.4.2.21 Trust - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8342.903 8427.01 0.927 0.071 0.078
# parameters of interest
params_lcs_trust_curr_hyp4 <- broom::tidy(fit_mi_lcs_trust_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.065 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.490 NA NA
d_trust_1 ~1 -0.095 -0.171 -0.019 -0.323 -2.453 0.014
trust_t1 ~1 2.836 2.712 2.960 4.434 44.798 0.000
d_trust_1 ~~ d_trust_1 0.087 0.009 0.165 1.000 2.176 0.030
trust_t1 ~~ d_trust_1 -0.067 -0.132 -0.002 -0.358 -2.033 0.042
d_trust_1 ~~ sb06_01_t1 -0.035 -0.099 0.028 -0.118 -1.089 0.276
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with trust change score (current-self) is not significantly different from zero, r = -0.118, p = 0.276.

6.4.2.22 Trust - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8016.542 8100.649 0.958 0.043 0.047
# parameters of interest
params_lcs_trust_ideal_hyp4 <- broom::tidy(fit_mi_lcs_trust_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.897 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.338 NA NA
d_trust_1 ~1 0.062 0.017 0.107 0.471 2.705 0.007
trust_t1 ~1 1.900 1.808 1.993 5.456 40.189 0.000
d_trust_1 ~~ d_trust_1 0.017 -0.018 0.052 1.000 0.962 0.336
trust_t1 ~~ d_trust_1 0.006 -0.016 0.028 0.133 0.542 0.588
d_trust_1 ~~ sb06_01_t1 -0.006 -0.051 0.039 -0.045 -0.260 0.795
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with trust change score (ideal-self) is not significantly different from zero, r = -0.045, p = 0.795.

6.4.2.23 Trust - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8537.293 8621.4 0.941 0.063 0.065
# parameters of interest
params_lcs_trust_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.069 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.500 NA NA
d_trust_1 ~1 -0.096 -0.172 -0.021 -0.320 -2.499 0.012
trust_t1 ~1 2.836 2.712 2.960 4.418 44.795 0.000
d_trust_1 ~~ d_trust_1 0.090 0.012 0.168 1.000 2.264 0.024
trust_t1 ~~ d_trust_1 -0.071 -0.135 -0.007 -0.368 -2.166 0.030
d_trust_1 ~~ sb07_06_t1 -0.033 -0.122 0.055 -0.082 -0.739 0.460
sb07_06_t1 ~~ sb07_06_t1 1.829 1.657 2.000 1.000 20.861 0.000

Correlation of specific, facet-level change goals with trust change score (current-self) is not significantly different from zero, r = -0.082, p = 0.46.

6.4.2.24 Trust - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8209.045 8293.152 0.959 0.043 0.047
# parameters of interest
params_lcs_trust_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.897 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.336 NA NA
d_trust_1 ~1 0.062 0.018 0.107 0.478 2.733 0.006
trust_t1 ~1 1.900 1.808 1.993 5.454 40.199 0.000
d_trust_1 ~~ d_trust_1 0.017 -0.018 0.052 1.000 0.958 0.338
trust_t1 ~~ d_trust_1 0.006 -0.016 0.028 0.138 0.560 0.575
d_trust_1 ~~ sb07_06_t1 -0.032 -0.094 0.030 -0.182 -1.019 0.308
sb07_06_t1 ~~ sb07_06_t1 1.829 1.657 2.000 1.000 20.861 0.000

Correlation of specific, facet-level change goals with trust change score (ideal-self) is not significantly different from zero, r = -0.182, p = 0.308.

6.4.2.25 Organization - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7871.053 7955.16 0.981 0.047 0.037
# parameters of interest
params_lcs_organ_curr_hyp4 <- broom::tidy(fit_mi_lcs_organ_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.014 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.453 NA NA
d_organ_1 ~1 -0.088 -0.171 -0.006 -0.192 -2.101 0.036
organ_t1 ~1 2.856 2.709 3.004 2.771 37.961 0.000
d_organ_1 ~~ d_organ_1 0.212 0.082 0.342 1.000 3.195 0.001
organ_t1 ~~ d_organ_1 -0.120 -0.218 -0.022 -0.254 -2.409 0.016
d_organ_1 ~~ sb06_01_t1 -0.007 -0.089 0.076 -0.015 -0.163 0.871
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with organization change score (current-self) is not significantly different from zero, r = -0.015, p = 0.871.

6.4.2.26 Organization - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7060.943 7145.05 0.797 0.077 0.089
# parameters of interest
params_lcs_organ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_organ_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.980 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.709 NA NA
d_organ_1 ~1 -0.021 -0.086 0.044 -0.075 -0.641 0.521
organ_t1 ~1 1.679 1.575 1.782 4.282 31.762 0.000
d_organ_1 ~~ d_organ_1 0.080 0.014 0.146 1.000 2.391 0.017
organ_t1 ~~ d_organ_1 -0.037 -0.087 0.013 -0.333 -1.461 0.144
d_organ_1 ~~ sb06_01_t1 0.004 -0.048 0.057 0.016 0.165 0.869
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with organization change score (ideal-self) is not significantly different from zero, r = 0.016, p = 0.869.

6.4.2.27 Organization - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8123.153 8207.26 0.857 0.137 0.168
# parameters of interest
params_lcs_organ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.065 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.513 NA NA
d_organ_1 ~1 -0.089 -0.171 -0.007 -0.180 -2.116 0.034
organ_t1 ~1 2.856 2.709 3.003 2.776 37.969 0.000
d_organ_1 ~~ d_organ_1 0.245 0.098 0.393 1.000 3.253 0.001
organ_t1 ~~ d_organ_1 -0.185 -0.311 -0.059 -0.363 -2.872 0.004
d_organ_1 ~~ sb07_07_t1 0.140 -0.005 0.285 0.190 1.890 0.059
sb07_07_t1 ~~ sb07_07_t1 2.198 2.006 2.391 1.000 22.374 0.000

Correlation of specific, facet-level change goals with organization change score (current-self) is not significantly different from zero, r = 0.19, p = 0.059.

6.4.2.28 Organization - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7315.24 7399.347 0.764 0.084 0.092
# parameters of interest
params_lcs_organ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.979 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.715 NA NA
d_organ_1 ~1 -0.020 -0.084 0.045 -0.069 -0.597 0.551
organ_t1 ~1 1.678 1.575 1.782 4.328 31.814 0.000
d_organ_1 ~~ d_organ_1 0.080 0.014 0.147 1.000 2.368 0.018
organ_t1 ~~ d_organ_1 -0.037 -0.086 0.013 -0.335 -1.456 0.146
d_organ_1 ~~ sb07_07_t1 0.048 -0.035 0.132 0.115 1.133 0.257
sb07_07_t1 ~~ sb07_07_t1 2.198 2.006 2.391 1.000 22.374 0.000

Correlation of specific, facet-level change goals with organization change score (ideal-self) is not significantly different from zero, r = 0.115, p = 0.257.

6.4.2.29 Productiveness - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7909.008 7993.115 0.941 0.079 0.07
# parameters of interest
params_lcs_produ_curr_hyp4 <- broom::tidy(fit_mi_lcs_produ_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.021 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.655 NA NA
d_produ_1 ~1 -0.163 -0.254 -0.073 -0.271 -3.534 0.00
produ_t1 ~1 3.417 3.284 3.551 3.641 50.178 0.00
d_produ_1 ~~ d_produ_1 0.363 0.169 0.556 1.000 3.670 0.00
produ_t1 ~~ d_produ_1 -0.199 -0.309 -0.089 -0.352 -3.557 0.00
d_produ_1 ~~ sb06_01_t1 -0.004 -0.108 0.100 -0.007 -0.075 0.94
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.00
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.00

Correlation of general change goal with productiveness change score (current-self) is not significantly different from zero, r = -0.007, p = 0.94.

6.4.2.30 Productiveness - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 5970.44 6054.547 0.915 0.071 0.064
# parameters of interest
params_lcs_produ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_produ_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.887 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.584 NA NA
d_produ_1 ~1 0.012 -0.036 0.060 0.048 0.494 0.621
produ_t1 ~1 1.596 1.517 1.675 4.156 39.452 0.000
d_produ_1 ~~ d_produ_1 0.064 0.009 0.119 1.000 2.263 0.024
produ_t1 ~~ d_produ_1 -0.012 -0.043 0.019 -0.123 -0.745 0.456
d_produ_1 ~~ sb06_01_t1 -0.021 -0.069 0.027 -0.082 -0.856 0.392
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with productiveness change score (ideal-self) is not significantly different from zero, r = -0.082, p = 0.392.

6.4.2.31 Productiveness - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8107.171 8191.278 0.851 0.132 0.155
# parameters of interest
params_lcs_produ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.093 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.763 NA NA
d_produ_1 ~1 -0.165 -0.255 -0.075 -0.253 -3.595 0.000
produ_t1 ~1 3.417 3.283 3.550 3.668 50.200 0.000
d_produ_1 ~~ d_produ_1 0.422 0.209 0.636 1.000 3.884 0.000
produ_t1 ~~ d_produ_1 -0.282 -0.406 -0.158 -0.466 -4.464 0.000
d_produ_1 ~~ sb07_08_t1 0.201 0.054 0.348 0.224 2.677 0.007
sb07_08_t1 ~~ sb07_08_t1 1.899 1.651 2.148 1.000 14.992 0.000

Correlation of specific, facet-level change goals with productiveness change score (current-self) is significantly different from zero, r = 0.224, p = 0.007.

6.4.2.32 Productiveness - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6176.162 6260.269 0.916 0.071 0.063
# parameters of interest
params_lcs_produ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.880 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.574 NA NA
d_produ_1 ~1 0.012 -0.036 0.059 0.047 0.481 0.631
produ_t1 ~1 1.596 1.517 1.676 4.183 39.484 0.000
d_produ_1 ~~ d_produ_1 0.062 0.008 0.115 1.000 2.270 0.023
produ_t1 ~~ d_produ_1 -0.010 -0.041 0.021 -0.103 -0.624 0.533
d_produ_1 ~~ sb07_08_t1 0.041 -0.016 0.097 0.118 1.415 0.157
sb07_08_t1 ~~ sb07_08_t1 1.899 1.651 2.148 1.000 14.992 0.000

Correlation of specific, facet-level change goals with productiveness change score (ideal-self) is not significantly different from zero, r = 0.118, p = 0.157.

6.4.2.33 Responsibility - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8081.61 8165.717 0.903 0.087 0.093
# parameters of interest
params_lcs_respo_curr_hyp4 <- broom::tidy(fit_mi_lcs_respo_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.038 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.545 NA NA
d_respo_1 ~1 0.057 0.005 0.108 0.221 2.166 0.030
respo_t1 ~1 3.598 3.494 3.703 7.363 67.313 0.000
d_respo_1 ~~ d_respo_1 0.066 0.011 0.120 1.000 2.357 0.018
respo_t1 ~~ d_respo_1 -0.041 -0.080 -0.003 -0.330 -2.097 0.036
d_respo_1 ~~ sb06_01_t1 0.011 -0.038 0.060 0.044 0.457 0.648
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with responsibility change score (current-self) is not significantly different from zero, r = 0.044, p = 0.648.

6.4.2.34 Responsibility - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7581.434 7665.541 0.922 0.06 0.054
# parameters of interest
params_lcs_respo_ideal_hyp4 <- broom::tidy(fit_mi_lcs_respo_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.018 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.668 NA NA
d_respo_1 ~1 -0.007 -0.043 0.030 -0.036 -0.365 0.715
respo_t1 ~1 4.189 4.080 4.297 14.439 75.423 0.000
d_respo_1 ~~ d_respo_1 0.036 0.001 0.071 1.000 2.016 0.044
respo_t1 ~~ d_respo_1 -0.020 -0.044 0.005 -0.355 -1.584 0.113
d_respo_1 ~~ sb06_01_t1 0.015 -0.022 0.052 0.079 0.800 0.424
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with responsibility change score (ideal-self) is not significantly different from zero, r = 0.079, p = 0.424.

6.4.2.35 Responsibility - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8334.214 8418.321 0.859 0.108 0.12
# parameters of interest
params_lcs_respo_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.075 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.597 NA NA
d_respo_1 ~1 0.058 0.007 0.109 0.214 2.223 0.026
respo_t1 ~1 3.598 3.494 3.703 7.385 67.334 0.000
d_respo_1 ~~ d_respo_1 0.073 0.015 0.131 1.000 2.468 0.014
respo_t1 ~~ d_respo_1 -0.053 -0.096 -0.009 -0.399 -2.351 0.019
d_respo_1 ~~ sb07_09_t1 -0.065 -0.140 0.011 -0.161 -1.683 0.092
sb07_09_t1 ~~ sb07_09_t1 2.198 2.013 2.382 1.000 23.300 0.000

Correlation of specific, facet-level change goals with responsibility change score (current-self) is not significantly different from zero, r = -0.161, p = 0.092.

6.4.2.36 Responsibility - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7837.713 7921.82 0.936 0.054 0.052
# parameters of interest
params_lcs_respo_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.020 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.665 NA NA
d_respo_1 ~1 -0.006 -0.043 0.031 -0.031 -0.319 0.749
respo_t1 ~1 4.188 4.080 4.297 14.264 75.446 0.000
d_respo_1 ~~ d_respo_1 0.037 0.001 0.072 1.000 2.030 0.042
respo_t1 ~~ d_respo_1 -0.020 -0.045 0.005 -0.356 -1.574 0.116
d_respo_1 ~~ sb07_09_t1 -0.010 -0.066 0.046 -0.035 -0.346 0.729
sb07_09_t1 ~~ sb07_09_t1 2.198 2.013 2.382 1.000 23.300 0.000

Correlation of specific, facet-level change goals with responsibility change score (ideal-self) is not significantly different from zero, r = -0.035, p = 0.729.

6.4.2.37 Anxiety - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8150.319 8234.426 0.952 0.062 0.084
# parameters of interest
params_lcs_anxie_curr_hyp4 <- broom::tidy(fit_mi_lcs_anxie_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.023 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.464 NA NA
d_anxie_1 ~1 0.216 0.128 0.304 0.506 4.833 0.000
anxie_t1 ~1 2.748 2.613 2.883 2.920 39.959 0.000
d_anxie_1 ~~ d_anxie_1 0.182 0.070 0.295 1.000 3.176 0.001
anxie_t1 ~~ d_anxie_1 -0.111 -0.222 0.001 -0.275 -1.940 0.052
d_anxie_1 ~~ sb06_01_t1 0.021 -0.076 0.117 0.048 0.419 0.675
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with anxiety change score (current-self) is not significantly different from zero, r = 0.048, p = 0.675.

6.4.2.38 Anxiety - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7723.024 7807.131 0.958 0.028 0.046
# parameters of interest
params_lcs_anxie_ideal_hyp4 <- broom::tidy(fit_mi_lcs_anxie_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.898 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.895 NA NA
d_anxie_1 ~1 -0.022 -0.070 0.025 -0.087 -0.922 0.356
anxie_t1 ~1 4.596 4.535 4.658 17.904 146.723 0.000
d_anxie_1 ~~ d_anxie_1 0.065 0.004 0.127 1.000 2.074 0.038
anxie_t1 ~~ d_anxie_1 -0.025 -0.053 0.003 -0.378 -1.742 0.082
d_anxie_1 ~~ sb06_01_t1 0.047 -0.001 0.095 0.180 1.907 0.056
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with anxiety change score (ideal-self) is not significantly different from zero, r = 0.18, p = 0.056.

6.4.2.39 Anxiety - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8417.783 8501.89 0.853 0.115 0.151
# parameters of interest
params_lcs_anxie_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.038 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.482 NA NA
d_anxie_1 ~1 0.216 0.128 0.304 0.494 4.817 0.000
anxie_t1 ~1 2.748 2.613 2.883 2.922 39.956 0.000
d_anxie_1 ~~ d_anxie_1 0.191 0.075 0.306 1.000 3.227 0.001
anxie_t1 ~~ d_anxie_1 -0.127 -0.250 -0.004 -0.309 -2.032 0.042
d_anxie_1 ~~ sb07_10_t1 -0.024 -0.173 0.125 -0.037 -0.319 0.750
sb07_10_t1 ~~ sb07_10_t1 2.275 2.040 2.510 1.000 18.985 0.000

The correlation of specific, facet-level change goals with the anxiety change score (current-self) is not significantly different from zero, r = -0.037, p = 0.75.

6.4.2.40 Anxiety - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7994.889 8078.996 0.938 0.034 0.051
# parameters of interest
params_lcs_anxie_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.892 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.881 NA NA
d_anxie_1 ~1 -0.021 -0.070 0.027 -0.083 -0.870 0.384
anxie_t1 ~1 4.596 4.535 4.658 17.604 146.404 0.000
d_anxie_1 ~~ d_anxie_1 0.066 0.004 0.129 1.000 2.085 0.037
anxie_t1 ~~ d_anxie_1 -0.024 -0.053 0.004 -0.364 -1.690 0.091
d_anxie_1 ~~ sb07_10_t1 0.021 -0.041 0.084 0.055 0.677 0.499
sb07_10_t1 ~~ sb07_10_t1 2.275 2.040 2.510 1.000 18.985 0.000

Correlation of specific, facet-level change goals with anxiety change score (ideal-self) is not significantly different from zero, r = 0.055, p = 0.499.

6.4.2.41 Depression - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8103.179 8187.286 0.905 0.107 0.118
# parameters of interest
params_lcs_depre_curr_hyp4 <- broom::tidy(fit_mi_lcs_depre_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.071 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.607 NA NA
d_depre_1 ~1 0.117 0.056 0.178 0.310 3.753 0.000
depre_t1 ~1 3.037 2.917 3.158 4.561 49.367 0.000
d_depre_1 ~~ d_depre_1 0.142 0.072 0.212 1.000 3.970 0.000
depre_t1 ~~ d_depre_1 -0.100 -0.158 -0.041 -0.397 -3.341 0.001
d_depre_1 ~~ sb06_01_t1 -0.028 -0.092 0.037 -0.072 -0.841 0.400
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with depression change score (current-self) is not significantly different from zero, r = -0.072, p = 0.4.

6.4.2.42 Depression - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6477.437 6561.544 0.913 0.063 0.064
# parameters of interest
params_lcs_depre_ideal_hyp4 <- broom::tidy(fit_mi_lcs_depre_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.035 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.886 NA NA
d_depre_1 ~1 -0.018 -0.057 0.021 -0.072 -0.894 0.371
depre_t1 ~1 4.454 4.384 4.524 15.417 124.697 0.000
d_depre_1 ~~ d_depre_1 0.061 0.017 0.105 1.000 2.717 0.007
depre_t1 ~~ d_depre_1 -0.033 -0.062 -0.005 -0.467 -2.281 0.023
d_depre_1 ~~ sb06_01_t1 0.016 -0.022 0.054 0.064 0.822 0.411
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with depression change score (ideal-self) is not significantly different from zero, r = 0.064, p = 0.411.

6.4.2.43 Depression - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8401.66 8485.767 0.811 0.161 0.185
# parameters of interest
params_lcs_depre_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.180 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.774 NA NA
d_depre_1 ~1 0.115 0.054 0.176 0.264 3.681 0.000
depre_t1 ~1 3.038 2.917 3.159 4.591 49.381 0.000
d_depre_1 ~~ d_depre_1 0.189 0.090 0.287 1.000 3.758 0.000
depre_t1 ~~ d_depre_1 -0.156 -0.237 -0.075 -0.543 -3.778 0.000
d_depre_1 ~~ sb07_11_t1 -0.220 -0.348 -0.093 -0.314 -3.386 0.001
sb07_11_t1 ~~ sb07_11_t1 2.609 2.418 2.799 1.000 26.880 0.000

The correlation of specific, facet-level change goals with the depression change score (current-self) is significantly different from zero, r = -0.314, p = 0.001.

6.4.2.44 Depression - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6791.179 6875.286 0.901 0.067 0.067
# parameters of interest
params_lcs_depre_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.035 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.884 NA NA
d_depre_1 ~1 -0.018 -0.058 0.021 -0.073 -0.902 0.367
depre_t1 ~1 4.454 4.384 4.524 15.308 124.716 0.000
d_depre_1 ~~ d_depre_1 0.062 0.017 0.106 1.000 2.734 0.006
depre_t1 ~~ d_depre_1 -0.034 -0.063 -0.005 -0.466 -2.288 0.022
d_depre_1 ~~ sb07_11_t1 -0.022 -0.074 0.031 -0.054 -0.811 0.417
sb07_11_t1 ~~ sb07_11_t1 2.609 2.418 2.799 1.000 26.880 0.000

Correlation of specific, facet-level change goals with the depression change score (ideal-self) is not significantly different from zero, r = -0.054, p = 0.417.

6.4.2.45 Volatility - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8147.906 8232.013 0.965 0.061 0.086
# parameters of interest
params_lcs_volat_curr_hyp4 <- broom::tidy(fit_mi_lcs_volat_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.162 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.671 NA NA
d_volat_1 ~1 -0.177 -0.265 -0.089 -0.311 -3.949 0.000
volat_t1 ~1 3.117 2.978 3.256 3.161 43.889 0.000
d_volat_1 ~~ d_volat_1 0.324 0.196 0.452 1.000 4.948 0.000
volat_t1 ~~ d_volat_1 -0.288 -0.397 -0.179 -0.514 -5.187 0.000
d_volat_1 ~~ sb06_01_t1 0.015 -0.067 0.097 0.026 0.354 0.724
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with volatility change score (current-self) is not significantly different from zero, r = 0.026, p = 0.724.

6.4.2.46 Volatility - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7261.696 7345.803 0.957 0.041 0.052
# parameters of interest
params_lcs_volat_ideal_hyp4 <- broom::tidy(fit_mi_lcs_volat_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.847 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.644 NA NA
d_volat_1 ~1 0.046 -0.016 0.107 0.143 1.463 0.144
volat_t1 ~1 1.599 1.523 1.674 3.803 41.347 0.000
d_volat_1 ~~ d_volat_1 0.102 0.022 0.183 1.000 2.486 0.013
volat_t1 ~~ d_volat_1 -0.016 -0.059 0.027 -0.121 -0.741 0.459
d_volat_1 ~~ sb06_01_t1 -0.032 -0.088 0.025 -0.097 -1.101 0.271
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with volatility change score (ideal-self) is not significantly different from zero, r = -0.097, p = 0.271.

6.4.2.47 Volatility - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8383.689 8467.796 0.959 0.066 0.092
# parameters of interest
params_lcs_volat_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.192 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.712 NA NA
d_volat_1 ~1 -0.178 -0.266 -0.089 -0.301 -3.942 0.000
volat_t1 ~1 3.117 2.978 3.256 3.151 43.873 0.000
d_volat_1 ~~ d_volat_1 0.349 0.210 0.488 1.000 4.925 0.000
volat_t1 ~~ d_volat_1 -0.319 -0.435 -0.204 -0.546 -5.407 0.000
d_volat_1 ~~ sb07_12_t1 0.139 0.007 0.270 0.162 2.071 0.038
sb07_12_t1 ~~ sb07_12_t1 2.104 1.911 2.296 1.000 21.424 0.000

Correlation of specific, facet-level change goals with volatility change score (current-self) is significantly different from zero, r = 0.162, p = 0.038.

6.4.2.48 Volatility - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7502.824 7586.931 0.971 0.034 0.044
# parameters of interest
params_lcs_volat_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.840 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.633 NA NA
d_volat_1 ~1 0.045 -0.016 0.107 0.143 1.447 0.148
volat_t1 ~1 1.599 1.523 1.674 3.812 41.368 0.000
d_volat_1 ~~ d_volat_1 0.100 0.020 0.179 1.000 2.454 0.014
volat_t1 ~~ d_volat_1 -0.013 -0.055 0.029 -0.100 -0.618 0.537
d_volat_1 ~~ sb07_12_t1 0.043 -0.041 0.126 0.094 1.005 0.315
sb07_12_t1 ~~ sb07_12_t1 2.104 1.911 2.296 1.000 21.424 0.000

Correlation of specific, facet-level change goals with volatility change score (ideal-self) is not significantly different from zero, r = 0.094, p = 0.315.

6.4.2.49 Curiosity - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7963.513 8047.62 0.989 0.026 0.04
# parameters of interest
params_lcs_curio_curr_hyp4 <- broom::tidy(fit_mi_lcs_curio_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.994 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.433 NA NA
d_curio_1 ~1 0.038 -0.010 0.085 0.198 1.537 0.124
curio_t1 ~1 4.182 4.095 4.269 9.590 93.797 0.000
d_curio_1 ~~ d_curio_1 0.036 -0.001 0.073 1.000 1.902 0.057
curio_t1 ~~ d_curio_1 -0.017 -0.047 0.013 -0.203 -1.095 0.273
d_curio_1 ~~ sb06_01_t1 -0.007 -0.050 0.036 -0.036 -0.316 0.752
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with curiosity change score (current-self) is not significantly different from zero, r = -0.036, p = 0.752.

6.4.2.50 Curiosity - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7937.656 8021.763 0.926 0.052 0.057
# parameters of interest
params_lcs_curio_ideal_hyp4 <- broom::tidy(fit_mi_lcs_curio_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.980 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.467 NA NA
d_curio_1 ~1 0.024 -0.017 0.064 0.168 1.147 0.251
curio_t1 ~1 4.536 4.465 4.606 15.423 126.046 0.000
d_curio_1 ~~ d_curio_1 0.020 -0.006 0.046 1.000 1.475 0.140
curio_t1 ~~ d_curio_1 -0.008 -0.025 0.009 -0.195 -0.906 0.365
d_curio_1 ~~ sb06_01_t1 0.027 -0.013 0.067 0.189 1.322 0.186
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with curiosity change score (ideal-self) is not significantly different from zero, r = 0.189, p = 0.186.

6.4.2.51 Curiosity - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8136.233 8220.34 0.953 0.054 0.076
# parameters of interest
params_lcs_curio_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.983 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.420 NA NA
d_curio_1 ~1 0.037 -0.010 0.085 0.201 1.538 0.124
curio_t1 ~1 4.182 4.095 4.269 9.666 93.832 0.000
d_curio_1 ~~ d_curio_1 0.034 -0.003 0.071 1.000 1.821 0.069
curio_t1 ~~ d_curio_1 -0.014 -0.045 0.017 -0.174 -0.879 0.379
d_curio_1 ~~ sb07_13_t1 0.020 -0.044 0.084 0.082 0.608 0.543
sb07_13_t1 ~~ sb07_13_t1 1.720 1.527 1.912 1.000 17.527 0.000

Correlation of specific, facet-level change goals with curiosity change score (current-self) is not significantly different from zero, r = 0.082, p = 0.543.

6.4.2.52 Curiosity - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8112.848 8196.955 0.951 0.042 0.054
# parameters of interest
params_lcs_curio_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.979 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.466 NA NA
d_curio_1 ~1 0.024 -0.017 0.065 0.166 1.130 0.259
curio_t1 ~1 4.536 4.465 4.607 15.149 125.972 0.000
d_curio_1 ~~ d_curio_1 0.020 -0.007 0.048 1.000 1.462 0.144
curio_t1 ~~ d_curio_1 -0.008 -0.026 0.010 -0.193 -0.889 0.374
d_curio_1 ~~ sb07_13_t1 -0.001 -0.049 0.048 -0.004 -0.027 0.978
sb07_13_t1 ~~ sb07_13_t1 1.720 1.527 1.912 1.000 17.527 0.000

Correlation of specific, facet-level change goals with curiosity change score (ideal-self) is not significantly different from zero, r = -0.004, p = 0.978.

6.4.2.53 Aesthetic - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8170.972 8255.079 1 0 0.031
# parameters of interest
params_lcs_aesth_curr_hyp4 <- broom::tidy(fit_mi_lcs_aesth_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.000 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.489 NA NA
d_aesth_1 ~1 -0.007 -0.026 0.011 -0.075 -0.783 0.433
aesth_t1 ~1 2.934 2.810 3.058 14.461 46.387 0.000
d_aesth_1 ~~ d_aesth_1 0.010 -0.006 0.025 1.000 1.231 0.218
aesth_t1 ~~ d_aesth_1 -0.005 -0.014 0.004 -0.244 -1.059 0.289
d_aesth_1 ~~ sb06_01_t1 0.019 -0.002 0.040 0.185 1.735 0.083
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with aesthetic change score (current-self) is not significantly different from zero, r = 0.185, p = 0.083.

6.4.2.54 Aesthetic - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):
(here there were some convergence problems with the standard model that the loop tried to fit)

mi_lcs_aesth_ideal_hyp4 <- '
aesth_t1 =~ 1*bf06_05_t1 + lamb2*bf06_20_t1 + lamb3*bf06_35_t1 + lamb4*bf06_50_t1 # This specifies the measurement model for aesth at T1
aesth_t2 =~ 1*bf06_05_t2 + lamb2*bf06_20_t2 + lamb3*bf06_35_t2 + lamb4*bf06_50_t2 # This specifies the measurement model for aesth at T2 (with equality constraints)

aesth_t2 ~ 1*aesth_t1     # This parameter regresses aesth_t2 perfectly on aesth_t1
d_aesth_1 =~ 1*aesth_t2   # This defines the latent change score factor as measured perfectly by scores on aesth_t2
aesth_t2 ~ 0*1            # This line constrains the intercept of aesth_t2 to 0
aesth_t2 ~~ 0*aesth_t2    # This fixes the variance of aesth_t2 to 0

d_aesth_1 ~ 1              # This estimates the intercept of the change score 
aesth_t1 ~ 1               # This estimates the intercept of aesth_t1 
d_aesth_1 ~~ d_aesth_1     # This estimates the variance of the change scores 
aesth_t1 ~~ aesth_t1       # This estimates the variance of aesth_t1 
aesth_t1 ~~ d_aesth_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_aesth_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

bf06_05_t1 ~~ bf06_05_t2   # This allows residual covariance on indicator X1 across T1 and T2
bf06_20_t1 ~~ bf06_20_t2   # This allows residual covariance on indicator X2 across T1 and T2
bf06_35_t1 ~~ bf06_35_t2   # This allows residual covariance on indicator X3 across T1 and T2
bf06_50_t1 ~~ bf06_50_t2   # This allows residual covariance on indicator X4 across T1 and T2

bf06_05_t1 ~~ res1*bf06_05_t1   # This allows residual variance on indicator X1 at T1 
bf06_20_t1 ~~ res2*bf06_20_t1   # This allows residual variance on indicator X2 at T1
bf06_35_t1 ~~ res3*bf06_35_t1   # This allows residual variance on indicator X3 at T1
bf06_50_t1 ~~ res4*bf06_50_t1   # This allows residual variance on indicator X4 at T1

bf06_05_t2 ~~ res1*bf06_05_t2  # This allows residual variance on indicator X1 at T2 
bf06_20_t2 ~~ res2*bf06_20_t2  # This allows residual variance on indicator X2 at T2 
bf06_35_t2 ~~ res3*bf06_35_t2  # This allows residual variance on indicator X3 at T2
bf06_50_t2 ~~ res4*bf06_50_t2  # This allows residual variance on indicator X4 at T2

bf06_05_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
bf06_20_t1 ~ m2*1     # This estimates the intercept of X2 at T1
bf06_35_t1 ~ m3*1     # This estimates the intercept of X3 at T1
bf06_50_t1 ~ m4*1     # This estimates the intercept of X4 at T1

bf06_05_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
bf06_20_t2 ~ m2*1     # This estimates the intercept of X2 at T2
bf06_35_t2 ~ m3*1     # This estimates the intercept of X3 at T2
bf06_50_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'

fit_mi_lcs_aesth_ideal_hyp4 <- lavaan(mi_lcs_aesth_ideal_hyp4, 
                                     data=df_sbsa2_wide_pers_sb %>% filter(!is.na(bf06_05_t1) & !is.na(bf06_05_t2)), 
                                     estimator='WLSMV', fixed.x=FALSE, ordered="sb06_01_t1") # need to use a different optimizer here!
# This model did not converge properly with FIML and missings. No problem with complete data, though. 
summary(fit_mi_lcs_aesth_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 365 iterations

  Estimator                                       DWLS
  Optimization method                           NLMINB
  Number of model parameters                        32
  Number of equality constraints                    10

  Number of observations                           289

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                13.819      22.218
  Degrees of freedom                                34          34
  P-value (Chi-square)                           0.999       0.940
  Scaling correction factor                                  1.171
  Shift parameter                                           10.419
    simple second-order correction                                

Model Test Baseline Model:

  Test statistic                               684.025     390.308
  Degrees of freedom                                36          36
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.829

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000       1.000
  Tucker-Lewis Index (TLI)                       1.033       1.035
                                                                  
  Robust Comparative Fit Index (CFI)                            NA
  Robust Tucker-Lewis Index (TLI)                               NA

Root Mean Square Error of Approximation:

  RMSEA                                          0.000       0.000
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.000       0.009
  P-value H_0: RMSEA <= 0.050                    1.000       1.000
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                                  NA
  90 Percent confidence interval - lower                        NA
  90 Percent confidence interval - upper                        NA
  P-value H_0: Robust RMSEA <= 0.050                            NA
  P-value H_0: Robust RMSEA >= 0.080                            NA

Standardized Root Mean Square Residual:

  SRMR                                           0.026       0.026

Parameter Estimates:

  Standard errors                           Robust.sem
  Information                                 Expected
  Information saturated (h1) model        Unstructured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 =~                                                           
    b06_05_           1.000                               0.015    0.010
    b06_20_ (lmb2)   46.908    1.025   45.748    0.000    0.710    0.698
    b06_35_ (lmb3)   47.885    1.048   45.706    0.000    0.725    0.773
    b06_50_ (lmb4)  -37.295    0.816  -45.694    0.000   -0.565   -0.509
  aesth_t2 =~                                                           
    b06_05_           1.000                               0.015    0.010
    b06_20_ (lmb2)   46.908    1.025   45.748    0.000    0.718    0.702
    b06_35_ (lmb3)   47.885    1.048   45.706    0.000    0.733    0.777
    b06_50_ (lmb4)  -37.295    0.816  -45.694    0.000   -0.571   -0.513
  d_aesth_1 =~                                                          
    asth_t2           1.000                               0.532    0.532

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t2 ~                                                            
    aesth_t1          1.000                               0.989    0.989

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 ~~                                                           
    d_aesth_1        -0.000    0.000   -1.711    0.087   -0.248   -0.248
  d_aesth_1 ~~                                                          
    sb06_01_t1       -0.001    0.001   -1.329    0.184   -0.160   -0.160
 .bf06_05_t1 ~~                                                         
   .bf06_05_t2        0.936    0.227    4.124    0.000    0.936    0.431
 .bf06_20_t1 ~~                                                         
   .bf06_20_t2        0.191    0.054    3.552    0.000    0.191    0.361
 .bf06_35_t1 ~~                                                         
   .bf06_35_t2       -0.091    0.039   -2.294    0.022   -0.091   -0.257
 .bf06_50_t1 ~~                                                         
   .bf06_50_t2        0.451    0.091    4.967    0.000    0.451    0.496

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .aesth_t2          0.000                               0.000    0.000
    d_aesth_1        -0.000    0.001   -0.011    0.992   -0.002   -0.002
    aesth_t1          3.065    0.074   41.206    0.000  202.455  202.455
   .bf06_05_1         0.000                               0.000    0.000
   .bf06_20_1 (m2) -139.513    0.335 -416.984    0.000 -139.513 -137.195
   .bf06_35_1 (m3) -142.472    0.342 -416.795    0.000 -142.472 -152.007
   .bf06_50_1 (m4)  116.276    0.266  436.610    0.000  116.276  104.887
   .bf06_05_2         0.000                               0.000    0.000
   .bf06_20_2 (m2) -139.513    0.335 -416.984    0.000 -139.513 -136.454
   .bf06_35_2 (m3) -142.472    0.342 -416.795    0.000 -142.472 -151.002
   .bf06_50_2 (m4)  116.276    0.266  436.610    0.000  116.276  104.585
    sb06_01_1         0.000    0.062    0.000    1.000    0.000    0.000

Thresholds:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    sb06_01_t1|t1    -1.363                              -1.363   -1.363
    sb06_01_t1|t2    -0.666                              -0.666   -0.666
    sb06_01_t1|t3     0.463                               0.463    0.463
    sb06_01_t1|t4     1.363                               1.363    1.363

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .asth_t2           0.000                               0.000    0.000
    d_sth_1           0.000    0.000    4.460    0.000    1.000    1.000
    asth_t1           0.000    0.000    6.782    0.000    1.000    1.000
   .b06_05_ (res1)    2.173    0.285    7.625    0.000    2.173    1.000
   .b06_20_ (res2)    0.530    0.055    9.598    0.000    0.530    0.512
   .b06_35_ (res3)    0.353    0.047    7.577    0.000    0.353    0.402
   .b06_50_ (res4)    0.910    0.097    9.390    0.000    0.910    0.741
   .b06_05_ (res1)    2.173    0.285    7.625    0.000    2.173    1.000
   .b06_20_ (res2)    0.530    0.055    9.598    0.000    0.530    0.507
   .b06_35_ (res3)    0.353    0.047    7.577    0.000    0.353    0.397
   .b06_50_ (res4)    0.910    0.097    9.390    0.000    0.910    0.736
    s06_01_           1.000    1.000    1.000    0.317    1.000    1.000

Scales y*:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    sb06_01_t1        1.000                               1.000    1.000
# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
289 22 NA NA 1 0 0.026
# parameters of interest
params_lcs_aesth_ideal_hyp4 <- broom::tidy(fit_mi_lcs_aesth_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.989 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.532 NA NA
d_aesth_1 ~1 0.000 -0.003 0.003 -0.002 -0.011 0.992
aesth_t1 ~1 3.065 2.919 3.210 202.455 41.206 0.000
d_aesth_1 ~~ d_aesth_1 0.000 0.000 0.000 1.000 4.460 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.248 -1.711 0.087
d_aesth_1 ~~ sb06_01_t1 -0.001 -0.003 0.001 -0.160 -1.329 0.184
sb06_01_t1 ~~ sb06_01_t1 1.000 -0.960 2.960 1.000 1.000 0.317
sb06_01_t1 ~1 0.000 -0.121 0.121 0.000 0.000 1.000

Correlation of general change goal with aesthetic change score (ideal-self) is not significantly different from zero, r = -0.16, p = 0.184.

6.4.2.55 Aesthetic - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8393.414 8477.521 1 0.002 0.035
# parameters of interest
params_lcs_aesth_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.001 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.488 NA NA
d_aesth_1 ~1 -0.007 -0.026 0.011 -0.074 -0.768 0.443
aesth_t1 ~1 2.934 2.810 3.058 14.520 46.389 0.000
d_aesth_1 ~~ d_aesth_1 0.010 -0.006 0.025 1.000 1.227 0.220
aesth_t1 ~~ d_aesth_1 -0.005 -0.014 0.004 -0.246 -1.055 0.291
d_aesth_1 ~~ sb07_14_t1 0.004 -0.020 0.027 0.026 0.292 0.771
sb07_14_t1 ~~ sb07_14_t1 1.960 1.782 2.138 1.000 21.633 0.000

Correlation of specific, facet-level change goals with aesthetic change score (current-self) is not significantly different from zero, r = 0.026, p = 0.771.

6.4.2.56 Aesthetic - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8282.657 8366.764 0.977 0.037 0.058
# parameters of interest
params_lcs_aesth_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.989 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.546 NA NA
d_aesth_1 ~1 0.000 -0.002 0.002 -0.001 -0.011 0.991
aesth_t1 ~1 3.064 2.927 3.201 158.348 43.860 0.000
d_aesth_1 ~~ d_aesth_1 0.000 0.000 0.000 1.000 2.287 0.022
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.257 -1.431 0.153
d_aesth_1 ~~ sb07_14_t1 0.001 -0.002 0.004 0.071 0.706 0.480
sb07_14_t1 ~~ sb07_14_t1 1.960 1.782 2.138 1.000 21.633 0.000

Correlation of specific, facet-level change goals with aesthetic change score (ideal-self) is not significantly different from zero, r = 0.071, p = 0.48.

6.4.2.57 Imagination - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7786.61 7870.717 0.962 0.056 0.054
# parameters of interest
params_lcs_imagi_curr_hyp4 <- broom::tidy(fit_mi_lcs_imagi_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.025 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.489 NA NA
d_imagi_1 ~1 0.111 0.044 0.178 0.318 3.254 0.001
imagi_t1 ~1 3.644 3.544 3.744 4.978 71.253 0.000
d_imagi_1 ~~ d_imagi_1 0.122 0.045 0.199 1.000 3.118 0.002
imagi_t1 ~~ d_imagi_1 -0.074 -0.139 -0.008 -0.288 -2.198 0.028
d_imagi_1 ~~ sb06_01_t1 -0.015 -0.080 0.051 -0.042 -0.440 0.660
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with imagination change score (current-self) is not significantly different from zero, r = -0.042, p = 0.66.

6.4.2.58 Imagination - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7251.188 7335.295 0.939 0.048 0.054
# parameters of interest
params_lcs_imagi_ideal_hyp4 <- broom::tidy(fit_mi_lcs_imagi_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.069 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.743 NA NA
d_imagi_1 ~1 0.021 -0.029 0.071 0.081 0.830 0.407
imagi_t1 ~1 4.611 4.549 4.673 12.173 146.025 0.000
d_imagi_1 ~~ d_imagi_1 0.069 0.021 0.118 1.000 2.805 0.005
imagi_t1 ~~ d_imagi_1 -0.044 -0.082 -0.005 -0.438 -2.228 0.026
d_imagi_1 ~~ sb06_01_t1 0.010 -0.034 0.053 0.037 0.447 0.655
sb06_01_t1 ~~ sb06_01_t1 1.029 0.883 1.175 1.000 13.805 0.000
sb06_01_t1 ~1 3.059 2.951 3.168 3.016 55.362 0.000

Correlation of general change goal with imagination change score (ideal-self) is not significantly different from zero, r = 0.037, p = 0.655.

6.4.2.59 Imagination - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8010.164 8094.271 0.915 0.085 0.098
# parameters of interest
params_lcs_imagi_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.044 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.512 NA NA
d_imagi_1 ~1 0.112 0.046 0.179 0.314 3.319 0.001
imagi_t1 ~1 3.644 3.544 3.745 4.996 71.264 0.000
d_imagi_1 ~~ d_imagi_1 0.128 0.051 0.205 1.000 3.239 0.001
imagi_t1 ~~ d_imagi_1 -0.086 -0.154 -0.018 -0.329 -2.488 0.013
d_imagi_1 ~~ sb07_15_t1 -0.088 -0.180 0.004 -0.174 -1.878 0.060
sb07_15_t1 ~~ sb07_15_t1 2.018 1.837 2.198 1.000 21.903 0.000

Correlation of specific, facet-level change goals with imagination change score (current-self) is not significantly different from zero, r = -0.174, p = 0.06.

6.4.2.60 Imagination - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7478.098 7562.205 0.892 0.065 0.066
# parameters of interest
params_lcs_imagi_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.068 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.740 NA NA
d_imagi_1 ~1 0.022 -0.028 0.072 0.083 0.853 0.394
imagi_t1 ~1 4.611 4.549 4.673 12.160 146.023 0.000
d_imagi_1 ~~ d_imagi_1 0.069 0.021 0.118 1.000 2.793 0.005
imagi_t1 ~~ d_imagi_1 -0.043 -0.082 -0.005 -0.435 -2.211 0.027
d_imagi_1 ~~ sb07_15_t1 -0.014 -0.076 0.048 -0.038 -0.443 0.658
sb07_15_t1 ~~ sb07_15_t1 2.018 1.837 2.198 1.000 21.903 0.000

Correlation of specific, facet-level change goals with imagination change score (ideal-self) is not significantly different from zero, r = -0.038, p = 0.658.

6.4.3 Hyp 4: Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_hyp4 <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_ideal_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_curr_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_ideal_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_curr_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_ideal_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_curr_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_ideal_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_curr_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_ideal_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_curr_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_ideal_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_curr_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_socia_ideal_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_asser_curr_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_ideal_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_curr_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_asser_ideal_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_energ_curr_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_ideal_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_curr_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_energ_ideal_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_compa_curr_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_ideal_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_curr_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_compa_ideal_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_respe_curr_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_ideal_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_curr_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_respe_ideal_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_trust_curr_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_ideal_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_curr_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_trust_ideal_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_organ_curr_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_ideal_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_curr_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_organ_ideal_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_produ_curr_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_ideal_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_curr_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_produ_ideal_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_respo_curr_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_ideal_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_curr_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_respo_ideal_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_anxie_curr_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_ideal_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_curr_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_depre_curr_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_ideal_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_curr_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_depre_ideal_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_volat_curr_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_ideal_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_curr_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_volat_ideal_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_curio_curr_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_ideal_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_curr_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_curio_ideal_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_aesth_curr_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_ideal_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_curr_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_imagi_curr_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_ideal_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_curr_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: covariance of the latent change score and change goal(s)

kable(df_table_hyp4[1:20, ], digits = 3)
trait ref goal estimate std.all statistic p.value
extraversion current general -0.026 -0.088 -1.090 0.276
extraversion ideal general 0.002 0.009 0.094 0.925
extraversion current specific -0.046 -0.235 -1.264 0.206
extraversion ideal specific 0.016 0.113 0.812 0.417
agreeableness current general 0.023 0.110 1.383 0.167
agreeableness ideal general 0.009 0.032 0.438 0.662
agreeableness current specific -0.014 -0.072 -0.728 0.467
agreeableness ideal specific -0.004 -0.014 -0.150 0.880
conscientiousness current general 0.022 0.053 0.619 0.536
conscientiousness ideal general 0.011 0.043 0.538 0.590
conscientiousness current specific -0.108 -0.213 -2.365 0.018
conscientiousness ideal specific -0.035 -0.113 -1.255 0.209
neuroticism current general -0.004 -0.009 -0.123 0.902
neuroticism ideal general -0.046 -0.122 -1.665 0.096
neuroticism current specific 0.135 0.248 3.053 0.002
neuroticism ideal specific 0.027 0.068 0.847 0.397
openness current general -0.016 -0.059 -0.692 0.489
openness ideal general 0.003 0.017 0.197 0.844
openness current specific -0.028 -0.130 -1.392 0.164
openness ideal specific -0.002 -0.017 -0.177 0.860

Three covariances/correlations that significantly differ from zero:
- Changes in current-level conscientiousness covary with the specific trait goals (latent factor of the three C facets).
- Changes in current-level neuroticism covary with the specific trait goals (latent factor of the three N facets).

Results summary across the Big Five facets: covariance of the latent change score and change goal(s)

kable(df_table_hyp4[21:80, ], digits = 3)
trait ref goal estimate std.all statistic p.value
sociability current general -0.026 -0.065 -0.796 0.426
sociability ideal general 0.042 0.153 1.531 0.126
sociability current specific -0.104 -0.203 -2.128 0.033
sociability ideal specific -0.042 -0.126 -1.224 0.221
assertiveness current general -0.019 -0.069 -0.848 0.397
assertiveness ideal general -0.014 -0.067 -0.629 0.530
assertiveness current specific -0.068 -0.189 -2.134 0.033
assertiveness ideal specific 0.010 0.039 0.405 0.686
energy current general 0.016 0.103 0.976 0.329
energy ideal general 0.000 0.001 0.008 0.993
energy current specific -0.001 -0.007 -0.074 0.941
energy ideal specific 0.003 0.016 0.153 0.879
compassion current general 0.027 0.109 1.014 0.311
compassion ideal general -0.030 -0.131 -1.011 0.312
compassion current specific -0.010 -0.031 -0.264 0.792
compassion ideal specific 0.018 0.060 0.403 0.687
respectfulness current general 0.000 0.001 0.013 0.990
respectfulness ideal general 0.009 0.036 0.367 0.714
respectfulness current specific -0.066 -0.150 -1.915 0.056
respectfulness ideal specific -0.050 -0.151 -1.591 0.112
trust current general -0.035 -0.118 -1.089 0.276
trust ideal general -0.006 -0.045 -0.260 0.795
trust current specific -0.033 -0.082 -0.739 0.460
trust ideal specific -0.032 -0.182 -1.019 0.308
organization current general -0.007 -0.015 -0.163 0.871
organization ideal general 0.004 0.016 0.165 0.869
organization current specific 0.140 0.190 1.890 0.059
organization ideal specific 0.048 0.115 1.133 0.257
productiveness current general -0.004 -0.007 -0.075 0.940
productiveness ideal general -0.021 -0.082 -0.856 0.392
productiveness current specific 0.201 0.224 2.677 0.007
productiveness ideal specific 0.041 0.118 1.415 0.157
responsibility current general 0.011 0.044 0.457 0.648
responsibility ideal general 0.015 0.079 0.800 0.424
responsibility current specific -0.065 -0.161 -1.683 0.092
responsibility ideal specific -0.010 -0.035 -0.346 0.729
anxiety current general 0.021 0.048 0.419 0.675
anxiety ideal general 0.047 0.180 1.907 0.056
anxiety current specific -0.024 -0.037 -0.319 0.750
anxiety ideal specific 0.021 0.055 0.677 0.499
depression current general -0.028 -0.072 -0.841 0.400
depression ideal general 0.016 0.064 0.822 0.411
depression current specific -0.220 -0.314 -3.386 0.001
depression ideal specific -0.022 -0.054 -0.811 0.417
volatility current general 0.015 0.026 0.354 0.724
volatility ideal general -0.032 -0.097 -1.101 0.271
volatility current specific 0.139 0.162 2.071 0.038
volatility ideal specific 0.043 0.094 1.005 0.315
curiosity current general -0.007 -0.036 -0.316 0.752
curiosity ideal general 0.027 0.189 1.322 0.186
curiosity current specific 0.020 0.082 0.608 0.543
curiosity ideal specific -0.001 -0.004 -0.027 0.978
aesthetic current general 0.019 0.185 1.735 0.083
aesthetic ideal general -0.001 -0.160 -1.329 0.184
aesthetic current specific 0.004 0.026 0.292 0.771
aesthetic ideal specific 0.001 0.071 0.706 0.480
imagination current general -0.015 -0.042 -0.440 0.660
imagination ideal general 0.010 0.037 0.447 0.655
imagination current specific -0.088 -0.174 -1.878 0.060
imagination ideal specific -0.014 -0.038 -0.443 0.658

Looking at the facets, we see five covariances that significantly differ from zero (at p < .05):
- For sociability and assertiveness, changes in the current-level the specific facet change goal (both effects barely significant).
- For productiveness, changes in the current-level the specific facet change goal.
- Changes in current-level depression and volatility covary with the respective specific facet change goal.

Prepare data frame for plotting:

Show the code
df_table_hyp4_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_ideal_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_curr_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_ideal_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_curr_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_ideal_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_curr_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_ideal_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_curr_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_ideal_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_curr_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_ideal_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_curr_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_socia_ideal_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_asser_curr_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_ideal_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_curr_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_asser_ideal_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_energ_curr_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_ideal_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_curr_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_energ_ideal_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_compa_curr_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_ideal_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_curr_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_compa_ideal_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_respe_curr_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_ideal_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_curr_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_respe_ideal_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_trust_curr_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_ideal_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_curr_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_trust_ideal_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_organ_curr_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_ideal_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_curr_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_organ_ideal_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_produ_curr_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_ideal_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_curr_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_produ_ideal_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_respo_curr_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_ideal_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_curr_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_respo_ideal_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_anxie_curr_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_ideal_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_curr_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_depre_curr_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_ideal_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_curr_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_depre_ideal_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_volat_curr_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_ideal_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_curr_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_volat_ideal_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_curio_curr_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_ideal_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_curr_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_curio_ideal_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_aesth_curr_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_ideal_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_curr_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_imagi_curr_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_ideal_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_curr_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp4_plot <- df_table_hyp4_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor(ref, levels = c("current", "ideal"), labels = c("current", "ideal"))) %>% 
  mutate(goal = factor(goal, levels = c("general", "specific"), labels = c("general", "specific"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • current = current-level personality
  • ideal = ideal-level personality
  • general = general change goal
  • specific = specific, facet-level change goal(s)
Show the code
ggplot(df_table_hyp4_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + goal, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.5 H5: Acceptance goals and change in personality (current / ideal) in self-acceptance group

Not specifically preregistered for study 2 because we were foremost interested in the moderation hypothesis (H7 in prereg / H3 in paper) and thought that it was somewhat redundant with these models of correlations with the change score. I still ran the models for study 2 here (without the control group and for changes between T1 and T2) in case the comparison with study 1 is of interest.

In the self-acceptance group, there will be a correlation between acceptance goals and change in ideal-self ratings but not change in current-self ratings.

We will test this one domain/facet at a time. We will use both general continuous change goal score as well as trait-specific change goals. To test this hypothesis, we will estimate the mean-level difference across time for both current and ideal trait ratings using latent change models and correlate change goals with the change variable from those models.

Reshape and split data set by intervention group:

Show the code
# from T1 to T2
df_sbsa2_wide_pers_sa <- df_sbsa2 %>% 
  filter(rando=="Self-Acceptance" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07")), # facet-specific change goals
         sa06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sa07"), sa06_01)) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, sa06_01_t2))
# colnames(df_sbsa2_wide_pers_sa)

group_assign <- df_sbsa2 %>% select(pid, rando) %>% unique()

df_sbsa2_wide_pers_sa <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Acceptance") %>% select(-rando, -ends_with("_t3")) %>%
  left_join(df_sbsa2_wide_pers_sa)

# follow-up, from T2 to T3 (for later)
df_sbsa2_wide_pers_sa_fu <- df_sbsa2 %>% 
  filter(rando=="Self-Acceptance" & time %in% c(2,3)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07")), # facet-specific change goals
         sa06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sa07"), sa06_01)) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, sa06_01_t2))
# colnames(df_sbsa2_wide_pers_sa)

df_sbsa2_wide_pers_sa_fu <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Acceptance" & !is.na(valid_t2)) %>% select(-rando, -ends_with("_t1")) %>%
  left_join(df_sbsa2_wide_pers_sa_fu)

6.5.1 Big Five traits

6.5.1.1 Extraversion - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_hyp5 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_extra_curr_hyp5 <- lavaan(mi_lcs_extra_curr_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 4384.367 4453.075 0.992 0.041 0.043
# parameters of interest
params_lcs_extra_curr_hyp5 <- broom::tidy(fit_mi_lcs_extra_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                     "d_extra_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                     "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.025 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.449 NA NA
d_extra_1 ~1 0.089 0.045 0.134 0.342 3.955 0.000
extra_t1 ~1 3.032 2.944 3.119 5.092 67.772 0.000
d_extra_1 ~~ d_extra_1 0.068 0.035 0.101 1.000 3.985 0.000
extra_t1 ~~ d_extra_1 -0.043 -0.070 -0.015 -0.274 -3.021 0.003
d_extra_1 ~~ sa06_01_t1 0.008 -0.028 0.044 0.035 0.446 0.656
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

The correlation of general acceptance goal with the extraversion change score (current-self) is not significantly different from zero, r = 0.035, p = 0.656.

6.5.1.2 Extraversion - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_hyp5 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_extra_ideal_hyp5 <- lavaan(mi_lcs_extra_ideal_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3855.205 3923.913 0.96 0.06 0.071
# parameters of interest
params_lcs_extra_ideal_hyp5 <- broom::tidy(fit_mi_lcs_extra_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.993 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.646 NA NA
d_extra_1 ~1 -0.019 -0.068 0.031 -0.072 -0.737 0.461
extra_t1 ~1 3.689 3.625 3.752 9.261 113.383 0.000
d_extra_1 ~~ d_extra_1 0.067 0.027 0.108 1.000 3.253 0.001
extra_t1 ~~ d_extra_1 -0.032 -0.057 -0.008 -0.315 -2.561 0.010
d_extra_1 ~~ sa06_01_t1 0.016 -0.024 0.057 0.070 0.778 0.437
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with extraversion change score (ideal-self) is not significantly different from zero, r = 0.07, p = 0.437.

6.5.1.3 Extraversion - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_specif_hyp5 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sa07_01_t1 + sa07_02_t1 + sa07_03_t1 # latent acceptance goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_01_t1 ~~ sa07_01_t1
sa07_02_t1 ~~ sa07_02_t1
sa07_03_t1 ~~ sa07_03_t1

sa07_01_t1 ~ 1
sa07_02_t1 ~ 1
sa07_03_t1 ~ 1
'
fit_mi_lcs_extra_curr_specif_hyp5 <- lavaan(mi_lcs_extra_curr_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 6877.957 6973.384 0.919 0.107 0.155
# parameters of interest
params_lcs_extra_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.048 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.472 NA NA
d_extra_1 ~1 0.089 0.045 0.133 0.333 3.958 0.000
extra_t1 ~1 3.032 2.944 3.119 5.098 67.832 0.000
d_extra_1 ~~ d_extra_1 0.072 0.036 0.108 1.000 3.913 0.000
extra_t1 ~~ d_extra_1 -0.052 -0.082 -0.022 -0.325 -3.396 0.001
goals ~~ d_extra_1 -0.035 -0.092 0.023 -0.147 -1.181 0.237
goals ~~ goals 0.771 0.373 1.169 1.000 3.799 0.000

Correlation of specific, facet-level acceptance goals with extraversion change score (current-self) is not significantly different from zero, r = -0.147, p = 0.237.

6.5.1.4 Extraversion - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_specif_hyp5 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sa07_01_t1 + sa07_02_t1 + sa07_03_t1 # latent acceptance goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_01_t1 ~~ sa07_01_t1
sa07_02_t1 ~~ sa07_02_t1
sa07_03_t1 ~~ sa07_03_t1

sa07_01_t1 ~ 1
sa07_02_t1 ~ 1
sa07_03_t1 ~ 1
'
fit_mi_lcs_extra_ideal_specif_hyp5 <- lavaan(mi_lcs_extra_ideal_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 6350.889 6446.316 0.994 0.019 0.045
# parameters of interest
params_lcs_extra_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.984 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.635 NA NA
d_extra_1 ~1 -0.019 -0.069 0.030 -0.075 -0.765 0.444
extra_t1 ~1 3.689 3.625 3.753 9.207 113.364 0.000
d_extra_1 ~~ d_extra_1 0.067 0.026 0.107 1.000 3.213 0.001
extra_t1 ~~ d_extra_1 -0.031 -0.056 -0.006 -0.298 -2.441 0.015
goals ~~ d_extra_1 -0.011 -0.058 0.037 -0.048 -0.443 0.658
goals ~~ goals 0.752 0.356 1.148 1.000 3.723 0.000

Correlation of specific, facet-level acceptance goals with extraversion change score (ideal-self) is not significantly different from zero, r = -0.048, p = 0.658.

6.5.1.5 Agreeableness - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_hyp5 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_agree_curr_hyp5 <- lavaan(mi_lcs_agree_curr_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3727.854 3796.562 0.996 0.023 0.034
# parameters of interest
params_lcs_agree_curr_hyp5 <- broom::tidy(fit_mi_lcs_agree_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                     "d_agree_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                     "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.965 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.520 NA NA
d_agree_1 ~1 0.026 -0.009 0.061 0.128 1.447 0.148
agree_t1 ~1 3.461 3.398 3.524 9.256 107.763 0.000
d_agree_1 ~~ d_agree_1 0.041 0.010 0.071 1.000 2.592 0.010
agree_t1 ~~ d_agree_1 -0.015 -0.033 0.002 -0.202 -1.691 0.091
d_agree_1 ~~ sa06_01_t1 -0.008 -0.032 0.017 -0.042 -0.605 0.545
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with agreeableness change score (current-self) is not significantly different from zero, r = -0.042, p = 0.545.

6.5.1.6 Agreeableness - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_hyp5 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_agree_ideal_hyp5 <- lavaan(mi_lcs_agree_ideal_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3719.683 3788.391 0.99 0.039 0.046
# parameters of interest
params_lcs_agree_ideal_hyp5 <- broom::tidy(fit_mi_lcs_agree_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.012 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.621 NA NA
d_agree_1 ~1 0.006 -0.037 0.050 0.023 0.291 0.771
agree_t1 ~1 3.778 3.705 3.851 8.441 101.667 0.000
d_agree_1 ~~ d_agree_1 0.076 0.042 0.109 1.000 4.471 0.000
agree_t1 ~~ d_agree_1 -0.040 -0.065 -0.015 -0.326 -3.193 0.001
d_agree_1 ~~ sa06_01_t1 0.000 -0.036 0.036 -0.001 -0.020 0.984
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with agreeableness change score (ideal-self) is not significantly different from zero, r = -0.001, p = 0.984.

6.5.1.7 Agreeableness - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_specif_hyp5 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sa07_04_t1 + sa07_05_t1 + sa07_06_t1 # latent acceptance goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_04_t1 ~~ sa07_04_t1
sa07_05_t1 ~~ sa07_05_t1
sa07_06_t1 ~~ sa07_06_t1

sa07_04_t1 ~ 1
sa07_05_t1 ~ 1
sa07_06_t1 ~ 1
'
fit_mi_lcs_agree_curr_specif_hyp5 <- lavaan(mi_lcs_agree_curr_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 6064.576 6160.003 0.967 0.061 0.084
# parameters of interest
params_lcs_agree_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.000 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.563 NA NA
d_agree_1 ~1 0.024 -0.010 0.058 0.115 1.363 0.173
agree_t1 ~1 3.462 3.399 3.525 9.401 107.744 0.000
d_agree_1 ~~ d_agree_1 0.043 0.011 0.075 1.000 2.595 0.009
agree_t1 ~~ d_agree_1 -0.021 -0.040 -0.003 -0.281 -2.230 0.026
goals ~~ d_agree_1 -0.059 -0.107 -0.011 -0.296 -2.392 0.017
goals ~~ goals 0.919 0.632 1.207 1.000 6.262 0.000

Correlation of specific, facet-level acceptance goals with agreeableness change score (current-self) is significantly different from zero, r = -0.296, p = 0.017.

6.5.1.8 Agreeableness - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_specif_hyp5 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sa07_04_t1 + sa07_05_t1 + sa07_06_t1 # latent acceptance goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_04_t1 ~~ sa07_04_t1
sa07_05_t1 ~~ sa07_05_t1
sa07_06_t1 ~~ sa07_06_t1

sa07_04_t1 ~ 1
sa07_05_t1 ~ 1
sa07_06_t1 ~ 1
'
fit_mi_lcs_agree_ideal_specif_hyp5 <- lavaan(mi_lcs_agree_ideal_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 6067.194 6162.622 0.987 0.04 0.052
# parameters of interest
params_lcs_agree_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.018 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.630 NA NA
d_agree_1 ~1 0.006 -0.038 0.049 0.021 0.259 0.795
agree_t1 ~1 3.778 3.705 3.851 8.461 101.680 0.000
d_agree_1 ~~ d_agree_1 0.076 0.043 0.110 1.000 4.455 0.000
agree_t1 ~~ d_agree_1 -0.042 -0.067 -0.017 -0.337 -3.253 0.001
goals ~~ d_agree_1 -0.024 -0.069 0.020 -0.094 -1.087 0.277
goals ~~ goals 0.884 0.564 1.204 1.000 5.417 0.000

Correlation of specific, facet-level acceptance goals with agreeableness change score (ideal-self) is not significantly different from zero, r = -0.094, p = 0.277.

6.5.1.9 Conscientiousness - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_hyp5 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_consc_curr_hyp5 <- lavaan(mi_lcs_consc_curr_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3974.434 4043.142 0.997 0.026 0.032
# parameters of interest
params_lcs_consc_curr_hyp5 <- broom::tidy(fit_mi_lcs_consc_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                     "d_consc_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                     "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.986 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.514 NA NA
d_consc_1 ~1 0.074 0.024 0.124 0.213 2.884 0.004
consc_t1 ~1 3.380 3.299 3.461 5.058 81.598 0.000
d_consc_1 ~~ d_consc_1 0.121 0.081 0.162 1.000 5.857 0.000
consc_t1 ~~ d_consc_1 -0.054 -0.087 -0.022 -0.234 -3.243 0.001
d_consc_1 ~~ sa06_01_t1 -0.031 -0.075 0.012 -0.101 -1.418 0.156
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with conscientiousness change score (current-self) is not significantly different from zero, r = -0.101, p = 0.156.

6.5.1.10 Conscientiousness - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_hyp5 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_consc_ideal_hyp5 <- lavaan(mi_lcs_consc_ideal_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3299.599 3368.307 0.994 0.031 0.041
# parameters of interest
params_lcs_consc_ideal_hyp5 <- broom::tidy(fit_mi_lcs_consc_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.036 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.744 NA NA
d_consc_1 ~1 0.027 -0.019 0.073 0.086 1.164 0.244
consc_t1 ~1 4.339 4.279 4.400 9.869 141.201 0.000
d_consc_1 ~~ d_consc_1 0.100 0.059 0.141 1.000 4.754 0.000
consc_t1 ~~ d_consc_1 -0.056 -0.085 -0.028 -0.407 -3.874 0.000
d_consc_1 ~~ sa06_01_t1 0.017 -0.015 0.049 0.060 1.044 0.297
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with conscientiousness change score (ideal-self) is not significantly different from zero, r = 0.06, p = 0.297.

6.5.1.11 Conscientiousness - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_specif_hyp5 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sa07_07_t1 + sa07_08_t1 + sa07_09_t1 # latent acceptance goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_07_t1 ~~ sa07_07_t1
sa07_08_t1 ~~ sa07_08_t1
sa07_09_t1 ~~ sa07_09_t1

sa07_07_t1 ~ 1
sa07_08_t1 ~ 1
sa07_09_t1 ~ 1
'
fit_mi_lcs_consc_curr_specif_hyp5 <- lavaan(mi_lcs_consc_curr_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 6378.707 6474.135 0.921 0.125 0.214
# parameters of interest
params_lcs_consc_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.018 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.548 NA NA
d_consc_1 ~1 0.074 0.023 0.124 0.205 2.867 0.004
consc_t1 ~1 3.380 3.299 3.461 5.051 81.584 0.000
d_consc_1 ~~ d_consc_1 0.130 0.087 0.173 1.000 5.911 0.000
consc_t1 ~~ d_consc_1 -0.073 -0.113 -0.032 -0.301 -3.503 0.000
goals ~~ d_consc_1 -0.062 -0.132 0.009 -0.159 -1.707 0.088
goals ~~ goals 1.152 0.853 1.450 1.000 7.563 0.000

The correlation of specific, facet-level acceptance goals with the conscientiousness change score (current-self) is not significantly different from zero, r = -0.159, p = 0.088.

6.5.1.12 Conscientiousness - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_specif_hyp5 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sa07_07_t1 + sa07_08_t1 + sa07_09_t1 # latent acceptance goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_07_t1 ~~ sa07_07_t1
sa07_08_t1 ~~ sa07_08_t1
sa07_09_t1 ~~ sa07_09_t1

sa07_07_t1 ~ 1
sa07_08_t1 ~ 1
sa07_09_t1 ~ 1
'
fit_mi_lcs_consc_ideal_specif_hyp5 <- lavaan(mi_lcs_consc_ideal_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5701.826 5797.254 1 0 0.032
# parameters of interest
params_lcs_consc_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.037 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.744 NA NA
d_consc_1 ~1 0.026 -0.020 0.072 0.081 1.097 0.273
consc_t1 ~1 4.339 4.279 4.400 9.859 141.196 0.000
d_consc_1 ~~ d_consc_1 0.100 0.058 0.141 1.000 4.716 0.000
consc_t1 ~~ d_consc_1 -0.057 -0.085 -0.028 -0.407 -3.878 0.000
goals ~~ d_consc_1 -0.050 -0.098 -0.002 -0.148 -2.036 0.042
goals ~~ goals 1.135 0.838 1.433 1.000 7.475 0.000

The correlation of specific, facet-level acceptance goals with the conscientiousness change score (ideal-self) is (barely) significantly different from zero, r = -0.148, p = 0.042.

6.5.1.13 Neuroticism - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_hyp5 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_neuro_curr_hyp5 <- lavaan(mi_lcs_neuro_curr_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 4184.13 4252.838 0.996 0.033 0.077
# parameters of interest
params_lcs_neuro_curr_hyp5 <- broom::tidy(fit_mi_lcs_neuro_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                     "d_neuro_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                     "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.985 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.458 NA NA
d_neuro_1 ~1 -0.177 -0.232 -0.122 -0.476 -6.305 0.000
neuro_t1 ~1 3.250 3.158 3.342 4.068 68.935 0.000
d_neuro_1 ~~ d_neuro_1 0.138 0.092 0.184 1.000 5.915 0.000
neuro_t1 ~~ d_neuro_1 -0.059 -0.101 -0.018 -0.199 -2.802 0.005
d_neuro_1 ~~ sa06_01_t1 -0.023 -0.065 0.019 -0.070 -1.082 0.279
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with neuroticism change score (current-self) is not significantly different from zero, r = -0.07, p = 0.279.

6.5.1.14 Neuroticism - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_hyp5 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_hyp5 <- lavaan(mi_lcs_neuro_ideal_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3513.93 3582.638 0.987 0.042 0.06
# parameters of interest
params_lcs_neuro_ideal_hyp5 <- broom::tidy(fit_mi_lcs_neuro_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.071 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.705 NA NA
d_neuro_1 ~1 -0.007 -0.062 0.049 -0.019 -0.232 0.817
neuro_t1 ~1 1.751 1.685 1.818 3.285 51.768 0.000
d_neuro_1 ~~ d_neuro_1 0.123 0.064 0.182 1.000 4.091 0.000
neuro_t1 ~~ d_neuro_1 -0.080 -0.127 -0.033 -0.427 -3.334 0.001
d_neuro_1 ~~ sa06_01_t1 -0.016 -0.061 0.030 -0.050 -0.681 0.496
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with neuroticism change score (ideal-self) is not significantly different from zero, r = -0.05, p = 0.496.

6.5.1.15 Neuroticism - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_specif_hyp5 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sa07_10_t1 + sa07_11_t1 + sa07_12_t1 # latent acceptance goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_10_t1 ~~ sa07_10_t1
sa07_11_t1 ~~ sa07_11_t1
sa07_12_t1 ~~ sa07_12_t1

sa07_10_t1 ~ 1
sa07_11_t1 ~ 1
sa07_12_t1 ~ 1
'
fit_mi_lcs_neuro_curr_specif_hyp5 <- lavaan(mi_lcs_neuro_curr_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 6594.582 6690.01 0.955 0.097 0.184
# parameters of interest
params_lcs_neuro_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.021 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.492 NA NA
d_neuro_1 ~1 -0.177 -0.232 -0.123 -0.461 -6.358 0.000
neuro_t1 ~1 3.250 3.158 3.343 4.069 68.935 0.000
d_neuro_1 ~~ d_neuro_1 0.148 0.098 0.198 1.000 5.846 0.000
neuro_t1 ~~ d_neuro_1 -0.087 -0.135 -0.039 -0.283 -3.567 0.000
goals ~~ d_neuro_1 0.066 0.005 0.127 0.178 2.121 0.034
goals ~~ goals 0.932 0.615 1.248 1.000 5.774 0.000

Correlation of specific, facet-level acceptance goals with neuroticism change score (current-self) is (barely) significantly different from zero, r = 0.178, p = 0.034.

6.5.1.16 Neuroticism - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_specif_hyp5 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sa07_10_t1 + sa07_11_t1 + sa07_12_t1 # latent acceptance goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_10_t1 ~~ sa07_10_t1
sa07_11_t1 ~~ sa07_11_t1
sa07_12_t1 ~~ sa07_12_t1

sa07_10_t1 ~ 1
sa07_11_t1 ~ 1
sa07_12_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_specif_hyp5 <- lavaan(mi_lcs_neuro_ideal_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5928.655 6024.083 0.99 0.033 0.051
# parameters of interest
params_lcs_neuro_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.066 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.699 NA NA
d_neuro_1 ~1 -0.006 -0.062 0.049 -0.018 -0.227 0.820
neuro_t1 ~1 1.751 1.685 1.818 3.282 51.764 0.000
d_neuro_1 ~~ d_neuro_1 0.122 0.063 0.181 1.000 4.046 0.000
neuro_t1 ~~ d_neuro_1 -0.078 -0.125 -0.031 -0.420 -3.255 0.001
goals ~~ d_neuro_1 0.003 -0.046 0.052 0.009 0.116 0.908
goals ~~ goals 0.939 0.618 1.260 1.000 5.732 0.000

The correlation of specific, facet-level acceptance goals with the neuroticism change score (ideal-self) is not significantly different from zero, r = 0.009, p = 0.908.

6.5.1.17 Openness - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_hyp5 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_openn_curr_hyp5 <- lavaan(mi_lcs_openn_curr_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3881.553 3950.261 1 0 0.031
# parameters of interest
params_lcs_openn_curr_hyp5 <- broom::tidy(fit_mi_lcs_openn_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                     "d_openn_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                     "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.018 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.405 NA NA
d_openn_1 ~1 0.076 0.033 0.119 0.318 3.442 0.001
openn_t1 ~1 3.564 3.489 3.639 5.935 93.254 0.000
d_openn_1 ~~ d_openn_1 0.057 0.026 0.089 1.000 3.544 0.000
openn_t1 ~~ d_openn_1 -0.035 -0.060 -0.010 -0.244 -2.727 0.006
d_openn_1 ~~ sa06_01_t1 -0.014 -0.048 0.020 -0.065 -0.794 0.427
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with openness change score (current-self) is not significantly different from zero, r = -0.065, p = 0.427.

6.5.1.18 Openness - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_hyp5 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_openn_ideal_hyp5 <- lavaan(mi_lcs_openn_ideal_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing="fiml")
summary(fit_mi_lcs_openn_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3782.839 3851.547 0.968 0.063 0.063
# parameters of interest
params_lcs_openn_ideal_hyp5 <- broom::tidy(fit_mi_lcs_openn_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.033 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.711 NA NA
d_openn_1 ~1 0.015 -0.018 0.047 0.070 0.895 0.371
openn_t1 ~1 3.907 3.848 3.966 12.679 130.316 0.000
d_openn_1 ~~ d_openn_1 0.045 0.019 0.071 1.000 3.437 0.001
openn_t1 ~~ d_openn_1 -0.025 -0.043 -0.008 -0.390 -2.858 0.004
d_openn_1 ~~ sa06_01_t1 -0.025 -0.050 0.000 -0.132 -1.941 0.052
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with openness change score (ideal-self) is not significantly different from zero, r = -0.132, p = 0.052.

6.5.1.19 Openness - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_specif_hyp5 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sa07_13_t1 + sa07_14_t1 + sa07_15_t1 # latent acceptance goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_13_t1 ~~ sa07_13_t1
sa07_14_t1 ~~ sa07_14_t1
sa07_15_t1 ~~ sa07_15_t1

sa07_13_t1 ~ 1
sa07_14_t1 ~ 1
sa07_15_t1 ~ 1
'
fit_mi_lcs_openn_curr_specif_hyp5 <- lavaan(mi_lcs_openn_curr_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')

summary(fit_mi_lcs_openn_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 6103.116 6198.544 0.95 0.096 0.185
# parameters of interest
params_lcs_openn_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.042 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.428 NA NA
d_openn_1 ~1 0.076 0.032 0.119 0.307 3.429 0.001
openn_t1 ~1 3.564 3.489 3.639 5.937 93.257 0.000
d_openn_1 ~~ d_openn_1 0.061 0.027 0.094 1.000 3.556 0.000
openn_t1 ~~ d_openn_1 -0.045 -0.075 -0.014 -0.301 -2.892 0.004
goals ~~ d_openn_1 -0.024 -0.067 0.019 -0.126 -1.099 0.272
goals ~~ goals 0.599 0.383 0.815 1.000 5.436 0.000

Correlation of specific, facet-level acceptance goals with openness change score (current-self) is not significantly different from zero, r = -0.126, p = 0.272.

6.5.1.20 Openness - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_specif_hyp5 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sa07_13_t1 + sa07_14_t1 + sa07_15_t1 # latent acceptance goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_13_t1 ~~ sa07_13_t1
sa07_14_t1 ~~ sa07_14_t1
sa07_15_t1 ~~ sa07_15_t1

sa07_13_t1 ~ 1
sa07_14_t1 ~ 1
sa07_15_t1 ~ 1
'
fit_mi_lcs_openn_ideal_specif_hyp5 <- lavaan(mi_lcs_openn_ideal_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing = "fiml")
summary(fit_mi_lcs_openn_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 6005.375 6100.803 0.96 0.069 0.107
# parameters of interest
params_lcs_openn_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.069 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.769 NA NA
d_openn_1 ~1 0.015 -0.018 0.047 0.066 0.886 0.376
openn_t1 ~1 3.907 3.848 3.966 12.792 130.356 0.000
d_openn_1 ~~ d_openn_1 0.048 0.021 0.076 1.000 3.432 0.001
openn_t1 ~~ d_openn_1 -0.030 -0.049 -0.011 -0.447 -3.118 0.002
goals ~~ d_openn_1 -0.024 -0.046 -0.002 -0.140 -2.101 0.036
goals ~~ goals 0.600 0.384 0.815 1.000 5.454 0.000

The correlation of specific, facet-level acceptance goals with the openness change score (ideal-self) is (barely) significantly different from zero, r = -0.14, p = 0.036.

6.5.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create template:
facet_template <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_facet_1 ~~ ind_goal     # estimates the covariance/correlation with acceptance goal variable

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # loop across 2 BFI versions (combined pre&post current/ideal)
  for (j in 5:length(bfi_versions)) {
    items = paste0(bfi_versions[[j]], item_nrs)
    # loop across 2 different goal operationalizations (sa06_01_t1 & sa07_XX_t1)
    for (k in 1:2) {
      if (k==1) {
        goal_op = "sa06_01_t1"
      } else{
        goal_op = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
      }
      template_filled <- str_replace_all(facet_template, 
                                         c("facet" = short_name,
                                           "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                           "ind_goal" = goal_op))
      facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
      # save to environment
      if (k==1) {
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp5")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp5")), facet_model_fit))
      } else{
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp5")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp5")), facet_model_fit))
      }
    }
  }
}  
6.5.2.1 Sociability - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7725.646 7809.623 0.953 0.078 0.05
# parameters of interest
params_lcs_socia_curr_hyp5 <- broom::tidy(fit_mi_lcs_socia_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.073 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.475 NA NA
d_socia_1 ~1 0.162 0.078 0.245 0.372 3.798 0.000
socia_t1 ~1 2.858 2.724 2.992 2.912 41.737 0.000
d_socia_1 ~~ d_socia_1 0.189 0.101 0.277 1.000 4.199 0.000
socia_t1 ~~ d_socia_1 -0.157 -0.233 -0.082 -0.369 -4.078 0.000
d_socia_1 ~~ sa06_01_t1 0.032 -0.040 0.104 0.083 0.879 0.379
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

The correlation of the general acceptance goal with the sociability change score (current-self) is not significantly different from zero, r = 0.083, p = 0.379.

6.5.2.2 Sociability - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7789.622 7873.599 0.88 0.064 0.071
# parameters of interest
params_lcs_socia_ideal_hyp5 <- broom::tidy(fit_mi_lcs_socia_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.888 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.475 NA NA
d_socia_1 ~1 -0.061 -0.121 -0.002 -0.330 -2.009 0.044
socia_t1 ~1 4.226 4.145 4.306 12.175 102.770 0.000
d_socia_1 ~~ d_socia_1 0.034 -0.021 0.090 1.000 1.215 0.224
socia_t1 ~~ d_socia_1 -0.001 -0.033 0.031 -0.015 -0.061 0.951
d_socia_1 ~~ sa06_01_t1 -0.020 -0.071 0.032 -0.118 -0.742 0.458
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with sociability change score (ideal-self) is not significantly different from zero, r = -0.118, p = 0.458.

6.5.2.3 Sociability - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8003.301 8087.277 0.907 0.112 0.136
# parameters of interest
params_lcs_socia_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.099 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.505 NA NA
d_socia_1 ~1 0.160 0.077 0.242 0.355 3.774 0.000
socia_t1 ~1 2.858 2.724 2.993 2.919 41.771 0.000
d_socia_1 ~~ d_socia_1 0.202 0.108 0.296 1.000 4.217 0.000
socia_t1 ~~ d_socia_1 -0.184 -0.268 -0.100 -0.417 -4.278 0.000
d_socia_1 ~~ sa07_01_t1 -0.066 -0.166 0.035 -0.108 -1.284 0.199
sa07_01_t1 ~~ sa07_01_t1 1.826 1.634 2.019 1.000 18.622 0.000

Correlation of specific, facet-level acceptance goals with sociability change score (current-self) is not significantly different from zero, r = -0.108, p = 0.199.

6.5.2.4 Sociability - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8065.135 8149.111 0.922 0.051 0.06
# parameters of interest
params_lcs_socia_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.888 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.468 NA NA
d_socia_1 ~1 -0.060 -0.118 -0.001 -0.328 -1.991 0.046
socia_t1 ~1 4.225 4.144 4.305 12.225 102.942 0.000
d_socia_1 ~~ d_socia_1 0.033 -0.021 0.088 1.000 1.192 0.233
socia_t1 ~~ d_socia_1 -0.001 -0.031 0.030 -0.010 -0.041 0.967
d_socia_1 ~~ sa07_01_t1 -0.059 -0.125 0.007 -0.239 -1.742 0.082
sa07_01_t1 ~~ sa07_01_t1 1.826 1.634 2.019 1.000 18.622 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (ideal-self) is not significantly different from zero, r = -0.239, p = 0.082.

6.5.2.5 Assertiveness - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7839.177 7923.154 0.992 0.028 0.035
# parameters of interest
params_lcs_asser_curr_hyp5 <- broom::tidy(fit_mi_lcs_asser_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.996 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.373 NA NA
d_asser_1 ~1 0.053 -0.003 0.110 0.204 1.849 0.065
asser_t1 ~1 3.105 2.986 3.224 4.442 51.156 0.000
d_asser_1 ~~ d_asser_1 0.069 0.019 0.118 1.000 2.727 0.006
asser_t1 ~~ d_asser_1 -0.033 -0.073 0.008 -0.178 -1.563 0.118
d_asser_1 ~~ sa06_01_t1 -0.009 -0.050 0.031 -0.040 -0.457 0.648
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with assertiveness change score (current-self) is not significantly different from zero, r = -0.04, p = 0.648.

6.5.2.6 Assertiveness - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7719.373 7803.349 0.972 0.033 0.057
# parameters of interest
params_lcs_asser_ideal_hyp5 <- broom::tidy(fit_mi_lcs_asser_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.935 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.435 NA NA
d_asser_1 ~1 -0.024 -0.073 0.024 -0.148 -0.992 0.321
asser_t1 ~1 4.134 4.043 4.224 11.645 89.478 0.000
d_asser_1 ~~ d_asser_1 0.027 -0.013 0.067 1.000 1.340 0.180
asser_t1 ~~ d_asser_1 -0.005 -0.033 0.024 -0.077 -0.308 0.758
d_asser_1 ~~ sa06_01_t1 0.035 -0.003 0.073 0.239 1.826 0.068
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with assertiveness change score (ideal-self) is not significantly different from zero, r = 0.239, p = 0.068.

6.5.2.7 Assertiveness - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8102.542 8186.519 0.958 0.063 0.087
# parameters of interest
params_lcs_asser_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.998 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.374 NA NA
d_asser_1 ~1 0.054 -0.003 0.110 0.204 1.864 0.062
asser_t1 ~1 3.105 2.986 3.224 4.433 51.158 0.000
d_asser_1 ~~ d_asser_1 0.069 0.019 0.119 1.000 2.713 0.007
asser_t1 ~~ d_asser_1 -0.033 -0.076 0.009 -0.182 -1.537 0.124
d_asser_1 ~~ sa07_02_t1 -0.006 -0.078 0.066 -0.017 -0.164 0.870
sa07_02_t1 ~~ sa07_02_t1 1.747 1.573 1.921 1.000 19.717 0.000

Correlation of specific, facet-level acceptance goals with assertiveness change score (current-self) is not significantly different from zero, r = -0.017, p = 0.87.

6.5.2.8 Assertiveness - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7981.585 8065.561 1 0 0.045
# parameters of interest
params_lcs_asser_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.930 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.436 NA NA
d_asser_1 ~1 -0.025 -0.073 0.023 -0.151 -1.031 0.303
asser_t1 ~1 4.134 4.044 4.225 11.625 89.537 0.000
d_asser_1 ~~ d_asser_1 0.028 -0.012 0.068 1.000 1.366 0.172
asser_t1 ~~ d_asser_1 -0.004 -0.033 0.025 -0.068 -0.273 0.785
d_asser_1 ~~ sa07_02_t1 0.060 -0.005 0.125 0.272 1.817 0.069
sa07_02_t1 ~~ sa07_02_t1 1.747 1.573 1.921 1.000 19.717 0.000

Correlation of specific, facet-level acceptance goals with assertiveness change score (ideal-self) is not significantly different from zero, r = 0.272, p = 0.069.

6.5.2.9 Energy - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7987.215 8071.191 0.971 0.047 0.055
# parameters of interest
params_lcs_energ_curr_hyp5 <- broom::tidy(fit_mi_lcs_energ_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.019 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.488 NA NA
d_energ_1 ~1 -0.047 -0.086 -0.007 -0.256 -2.322 0.020
energ_t1 ~1 2.676 2.563 2.788 6.989 46.612 0.000
d_energ_1 ~~ d_energ_1 0.034 0.001 0.066 1.000 2.022 0.043
energ_t1 ~~ d_energ_1 -0.020 -0.040 0.001 -0.279 -1.835 0.067
d_energ_1 ~~ sa06_01_t1 0.003 -0.021 0.027 0.018 0.245 0.806
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with energy change score (current-self) is not significantly different from zero, r = 0.018, p = 0.806.

6.5.2.10 Energy - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7431.315 7515.291 0.891 0.057 0.066
# parameters of interest
params_lcs_energ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_energ_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.009 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.780 NA NA
d_energ_1 ~1 0.002 -0.030 0.034 0.011 0.114 0.909
energ_t1 ~1 2.221 2.105 2.338 10.133 37.361 0.000
d_energ_1 ~~ d_energ_1 0.029 -0.018 0.075 1.000 1.202 0.229
energ_t1 ~~ d_energ_1 -0.015 -0.042 0.012 -0.398 -1.082 0.279
d_energ_1 ~~ sa06_01_t1 -0.009 -0.033 0.014 -0.062 -0.781 0.435
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with energy change score (ideal-self) is not significantly different from zero, r = -0.062, p = 0.435.

6.5.2.11 Energy - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8267.686 8351.662 0.903 0.09 0.113
# parameters of interest
params_lcs_energ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.049 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.523 NA NA
d_energ_1 ~1 -0.048 -0.087 -0.008 -0.249 -2.346 0.019
energ_t1 ~1 2.676 2.563 2.789 6.987 46.602 0.000
d_energ_1 ~~ d_energ_1 0.037 0.001 0.072 1.000 2.032 0.042
energ_t1 ~~ d_energ_1 -0.025 -0.050 0.000 -0.341 -1.929 0.054
d_energ_1 ~~ sa07_03_t1 0.038 -0.015 0.090 0.146 1.415 0.157
sa07_03_t1 ~~ sa07_03_t1 1.851 1.650 2.052 1.000 18.028 0.000

Correlation of specific, facet-level acceptance goals with energy change score (current-self) is not significantly different from zero, r = 0.146, p = 0.157.

6.5.2.12 Energy - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7714.43 7798.407 0.921 0.048 0.057
# parameters of interest
params_lcs_energ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.005 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.769 NA NA
d_energ_1 ~1 0.002 -0.030 0.034 0.012 0.125 0.900
energ_t1 ~1 2.221 2.105 2.338 10.085 37.352 0.000
d_energ_1 ~~ d_energ_1 0.028 -0.018 0.074 1.000 1.210 0.226
energ_t1 ~~ d_energ_1 -0.014 -0.041 0.012 -0.389 -1.083 0.279
d_energ_1 ~~ sa07_03_t1 -0.007 -0.043 0.029 -0.032 -0.398 0.690
sa07_03_t1 ~~ sa07_03_t1 1.851 1.650 2.052 1.000 18.028 0.000

Correlation of specific, facet-level acceptance goals with energy change score (ideal-self) is not significantly different from zero, r = -0.032, p = 0.69.

6.5.2.13 Compassion - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7766.535 7850.511 0.972 0.043 0.049
# parameters of interest
params_lcs_compa_curr_hyp5 <- broom::tidy(fit_mi_lcs_compa_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.892 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.546 NA NA
d_compa_1 ~1 0.050 -0.022 0.123 0.129 1.366 0.172
compa_t1 ~1 4.213 4.123 4.303 6.607 91.772 0.000
d_compa_1 ~~ d_compa_1 0.152 0.047 0.257 1.000 2.829 0.005
compa_t1 ~~ d_compa_1 -0.024 -0.090 0.042 -0.097 -0.713 0.476
d_compa_1 ~~ sa06_01_t1 -0.039 -0.100 0.023 -0.111 -1.236 0.216
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with compassion change score (current-self) is not significantly different from zero, r = -0.111, p = 0.216.

6.5.2.14 Compassion - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8035.384 8119.36 0.971 0.034 0.048
# parameters of interest
params_lcs_compa_ideal_hyp5 <- broom::tidy(fit_mi_lcs_compa_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.016 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.604 NA NA
d_compa_1 ~1 0.019 -0.064 0.102 0.053 0.457 0.648
compa_t1 ~1 4.291 4.196 4.385 6.936 89.023 0.000
d_compa_1 ~~ d_compa_1 0.135 0.021 0.249 1.000 2.315 0.021
compa_t1 ~~ d_compa_1 -0.073 -0.151 0.004 -0.323 -1.856 0.064
d_compa_1 ~~ sa06_01_t1 -0.005 -0.069 0.060 -0.014 -0.138 0.890
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with compassion change score (ideal-self) is not significantly different from zero, r = -0.014, p = 0.89.

6.5.2.15 Compassion - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8074.403 8158.38 0.942 0.063 0.076
# parameters of interest
params_lcs_compa_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.919 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.586 NA NA
d_compa_1 ~1 0.046 -0.027 0.120 0.113 1.236 0.217
compa_t1 ~1 4.213 4.123 4.303 6.578 91.771 0.000
d_compa_1 ~~ d_compa_1 0.166 0.052 0.281 1.000 2.843 0.004
compa_t1 ~~ d_compa_1 -0.046 -0.117 0.026 -0.175 -1.255 0.210
d_compa_1 ~~ sa07_04_t1 -0.131 -0.257 -0.006 -0.226 -2.053 0.040
sa07_04_t1 ~~ sa07_04_t1 2.024 1.813 2.235 1.000 18.799 0.000

Correlation of specific, facet-level acceptance goals with compassion change score (current-self) is (barely) significantly different from zero, r = -0.226, p = 0.04.

6.5.2.16 Compassion - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8346.947 8430.924 0.945 0.047 0.058
# parameters of interest
params_lcs_compa_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.025 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.623 NA NA
d_compa_1 ~1 0.017 -0.066 0.101 0.046 0.410 0.682
compa_t1 ~1 4.291 4.196 4.385 6.934 88.972 0.000
d_compa_1 ~~ d_compa_1 0.142 0.026 0.258 1.000 2.393 0.017
compa_t1 ~~ d_compa_1 -0.080 -0.159 -0.001 -0.344 -1.993 0.046
d_compa_1 ~~ sa07_04_t1 -0.060 -0.173 0.053 -0.111 -1.036 0.300
sa07_04_t1 ~~ sa07_04_t1 2.024 1.813 2.235 1.000 18.799 0.000

Correlation of specific, facet-level acceptance goals with compassion change score (ideal-self) is not significantly different from zero, r = -0.111, p = 0.3.

6.5.2.17 Respectfulness - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6758.117 6842.094 0.958 0.056 0.059
# parameters of interest
params_lcs_respe_curr_hyp5 <- broom::tidy(fit_mi_lcs_respe_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.996 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.629 NA NA
d_respe_1 ~1 0.024 -0.034 0.082 0.072 0.804 0.421
respe_t1 ~1 4.444 4.374 4.514 8.449 124.133 0.000
d_respe_1 ~~ d_respe_1 0.110 0.030 0.191 1.000 2.680 0.007
respe_t1 ~~ d_respe_1 -0.054 -0.105 -0.003 -0.309 -2.069 0.039
d_respe_1 ~~ sa06_01_t1 -0.007 -0.049 0.035 -0.022 -0.308 0.758
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with respectfulness change score (current-self) is not significantly different from zero, r = -0.022, p = 0.758.

6.5.2.18 Respectfulness - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6216.963 6300.939 0.932 0.065 0.061
# parameters of interest
params_lcs_respe_ideal_hyp5 <- broom::tidy(fit_mi_lcs_respe_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.996 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.386 NA NA
d_respe_1 ~1 -0.001 -0.042 0.040 -0.005 -0.035 0.972
respe_t1 ~1 4.625 4.560 4.690 12.258 139.827 0.000
d_respe_1 ~~ d_respe_1 0.021 -0.006 0.049 1.000 1.536 0.125
respe_t1 ~~ d_respe_1 -0.010 -0.036 0.016 -0.184 -0.761 0.447
d_respe_1 ~~ sa06_01_t1 -0.004 -0.040 0.032 -0.029 -0.209 0.834
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with respectfulness change score (ideal-self) is not significantly different from zero, r = -0.029, p = 0.834.

6.5.2.19 Respectfulness - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6992.382 7076.358 0.929 0.076 0.1
# parameters of interest
params_lcs_respe_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.065 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.742 NA NA
d_respe_1 ~1 0.021 -0.037 0.079 0.058 0.716 0.474
respe_t1 ~1 4.444 4.373 4.514 8.442 124.033 0.000
d_respe_1 ~~ d_respe_1 0.134 0.041 0.228 1.000 2.808 0.005
respe_t1 ~~ d_respe_1 -0.084 -0.139 -0.028 -0.433 -2.969 0.003
d_respe_1 ~~ sa07_05_t1 -0.195 -0.294 -0.095 -0.402 -3.818 0.000
sa07_05_t1 ~~ sa07_05_t1 1.744 1.473 2.015 1.000 12.613 0.000

Correlation of specific, facet-level acceptance goals with respectfulness change score (current-self) is significantly different from zero, r = -0.402, p = 0.

6.5.2.20 Respectfulness - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6478.347 6562.324 0.905 0.078 0.066
# parameters of interest
params_lcs_respe_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.004 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.398 NA NA
d_respe_1 ~1 -0.001 -0.043 0.040 -0.009 -0.063 0.950
respe_t1 ~1 4.625 4.560 4.690 12.144 139.684 0.000
d_respe_1 ~~ d_respe_1 0.023 -0.006 0.052 1.000 1.545 0.122
respe_t1 ~~ d_respe_1 -0.012 -0.039 0.015 -0.209 -0.867 0.386
d_respe_1 ~~ sa07_05_t1 -0.030 -0.091 0.030 -0.152 -0.984 0.325
sa07_05_t1 ~~ sa07_05_t1 1.744 1.473 2.015 1.000 12.613 0.000

Correlation of specific, facet-level acceptance goals with respectfulness change score (ideal-self) is not significantly different from zero, r = -0.152, p = 0.325.

6.5.2.21 Trust - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8045.446 8129.423 0.97 0.046 0.052
# parameters of interest
params_lcs_trust_curr_hyp5 <- broom::tidy(fit_mi_lcs_trust_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.038 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.313 NA NA
d_trust_1 ~1 -0.096 -0.165 -0.026 -0.445 -2.691 0.007
trust_t1 ~1 2.850 2.732 2.968 3.994 47.430 0.000
d_trust_1 ~~ d_trust_1 0.046 -0.027 0.120 1.000 1.231 0.218
trust_t1 ~~ d_trust_1 -0.042 -0.101 0.018 -0.271 -1.364 0.173
d_trust_1 ~~ sa06_01_t1 -0.007 -0.058 0.043 -0.038 -0.283 0.777
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with trust change score (current-self) is not significantly different from zero, r = -0.038, p = 0.777.

6.5.2.22 Trust - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7760.181 7844.158 0.967 0.037 0.044
# parameters of interest
params_lcs_trust_ideal_hyp5 <- broom::tidy(fit_mi_lcs_trust_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.107 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.597 NA NA
d_trust_1 ~1 -0.014 -0.076 0.048 -0.052 -0.455 0.649
trust_t1 ~1 1.946 1.847 2.045 3.806 38.538 0.000
d_trust_1 ~~ d_trust_1 0.076 0.005 0.147 1.000 2.108 0.035
trust_t1 ~~ d_trust_1 -0.062 -0.107 -0.017 -0.440 -2.706 0.007
d_trust_1 ~~ sa06_01_t1 -0.008 -0.053 0.036 -0.034 -0.371 0.710
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with trust change score (ideal-self) is not significantly different from zero, r = -0.034, p = 0.71.

6.5.2.23 Trust - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8337.224 8421.2 0.944 0.064 0.075
# parameters of interest
params_lcs_trust_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.025 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.296 NA NA
d_trust_1 ~1 -0.096 -0.165 -0.026 -0.463 -2.689 0.007
trust_t1 ~1 2.850 2.732 2.968 3.982 47.411 0.000
d_trust_1 ~~ d_trust_1 0.043 -0.030 0.116 1.000 1.150 0.250
trust_t1 ~~ d_trust_1 -0.034 -0.094 0.026 -0.229 -1.111 0.267
d_trust_1 ~~ sa07_06_t1 -0.055 -0.153 0.042 -0.193 -1.108 0.268
sa07_06_t1 ~~ sa07_06_t1 1.909 1.711 2.108 1.000 18.829 0.000

Correlation of specific, facet-level acceptance goals with trust change score (current-self) is not significantly different from zero, r = -0.193, p = 0.268.

6.5.2.24 Trust - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8053.016 8136.993 0.967 0.037 0.043
# parameters of interest
params_lcs_trust_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.106 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.595 NA NA
d_trust_1 ~1 -0.014 -0.076 0.048 -0.052 -0.450 0.653
trust_t1 ~1 1.946 1.847 2.045 3.819 38.550 0.000
d_trust_1 ~~ d_trust_1 0.075 0.004 0.146 1.000 2.080 0.038
trust_t1 ~~ d_trust_1 -0.061 -0.106 -0.016 -0.439 -2.677 0.007
d_trust_1 ~~ sa07_06_t1 -0.025 -0.102 0.052 -0.066 -0.629 0.529
sa07_06_t1 ~~ sa07_06_t1 1.909 1.711 2.108 1.000 18.829 0.000

Correlation of specific, facet-level acceptance goals with trust change score (ideal-self) is not significantly different from zero, r = -0.066, p = 0.529.

6.5.2.25 Organization - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7703.447 7787.423 1 0 0.022
# parameters of interest
params_lcs_organ_curr_hyp5 <- broom::tidy(fit_mi_lcs_organ_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.003 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.509 NA NA
d_organ_1 ~1 -0.064 -0.145 0.017 -0.138 -1.554 0.120
organ_t1 ~1 2.963 2.828 3.098 3.233 43.052 0.000
d_organ_1 ~~ d_organ_1 0.216 0.110 0.323 1.000 3.985 0.000
organ_t1 ~~ d_organ_1 -0.110 -0.192 -0.028 -0.259 -2.638 0.008
d_organ_1 ~~ sa06_01_t1 0.074 0.006 0.142 0.178 2.143 0.032
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with organization change score (current-self) is (barely) significantly different from zero, r = 0.178, p = 0.032.

6.5.2.26 Organization - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6690.012 6773.989 0.979 0.028 0.049
# parameters of interest
params_lcs_organ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_organ_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.971 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.603 NA NA
d_organ_1 ~1 -0.005 -0.062 0.051 -0.020 -0.182 0.856
organ_t1 ~1 1.754 1.651 1.857 4.149 33.466 0.000
d_organ_1 ~~ d_organ_1 0.069 0.009 0.129 1.000 2.243 0.025
organ_t1 ~~ d_organ_1 -0.029 -0.079 0.020 -0.262 -1.154 0.249
d_organ_1 ~~ sa06_01_t1 0.003 -0.040 0.046 0.013 0.139 0.889
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with organization change score (ideal-self) is not significantly different from zero, r = 0.013, p = 0.889.

6.5.2.27 Organization - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8017.535 8101.511 0.919 0.096 0.143
# parameters of interest
params_lcs_organ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.073 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.601 NA NA
d_organ_1 ~1 -0.067 -0.148 0.014 -0.129 -1.611 0.107
organ_t1 ~1 2.964 2.829 3.098 3.206 43.031 0.000
d_organ_1 ~~ d_organ_1 0.268 0.140 0.396 1.000 4.104 0.000
organ_t1 ~~ d_organ_1 -0.190 -0.294 -0.086 -0.397 -3.594 0.000
d_organ_1 ~~ sa07_07_t1 0.213 0.087 0.338 0.286 3.323 0.001
sa07_07_t1 ~~ sa07_07_t1 2.070 1.888 2.251 1.000 22.344 0.000

The correlation of specific, facet-level acceptance goals with the organization change score (current-self) is significantly different from zero, r = 0.286, p = 0.001.

6.5.2.28 Organization - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7008.38 7092.356 0.98 0.027 0.046
# parameters of interest
params_lcs_organ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.973 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.607 NA NA
d_organ_1 ~1 -0.005 -0.062 0.052 -0.019 -0.175 0.861
organ_t1 ~1 1.754 1.651 1.857 4.136 33.453 0.000
d_organ_1 ~~ d_organ_1 0.070 0.009 0.131 1.000 2.242 0.025
organ_t1 ~~ d_organ_1 -0.030 -0.079 0.019 -0.266 -1.193 0.233
d_organ_1 ~~ sa07_07_t1 0.051 -0.028 0.130 0.134 1.259 0.208
sa07_07_t1 ~~ sa07_07_t1 2.070 1.888 2.251 1.000 22.344 0.000

Correlation of specific, facet-level acceptance goals with organization change score (ideal-self) is not significantly different from zero, r = 0.134, p = 0.208.

6.5.2.29 Productiveness - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7607.317 7691.293 0.965 0.058 0.049
# parameters of interest
params_lcs_produ_curr_hyp5 <- broom::tidy(fit_mi_lcs_produ_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.962 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.544 NA NA
d_produ_1 ~1 -0.126 -0.200 -0.052 -0.322 -3.352 0.001
produ_t1 ~1 3.428 3.299 3.556 4.929 52.312 0.000
d_produ_1 ~~ d_produ_1 0.154 0.077 0.232 1.000 3.894 0.000
produ_t1 ~~ d_produ_1 -0.058 -0.114 -0.002 -0.212 -2.031 0.042
d_produ_1 ~~ sa06_01_t1 0.031 -0.024 0.087 0.090 1.111 0.267
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with productiveness change score (current-self) is not significantly different from zero, r = 0.09, p = 0.267.

6.5.2.30 Productiveness - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6087.909 6171.886 0.909 0.068 0.069
# parameters of interest
params_lcs_produ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_produ_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.045 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.675 NA NA
d_produ_1 ~1 -0.029 -0.076 0.017 -0.124 -1.241 0.215
produ_t1 ~1 1.585 1.507 1.663 4.307 39.898 0.000
d_produ_1 ~~ d_produ_1 0.056 0.009 0.104 1.000 2.321 0.020
produ_t1 ~~ d_produ_1 -0.034 -0.070 0.003 -0.388 -1.823 0.068
d_produ_1 ~~ sa06_01_t1 -0.006 -0.035 0.024 -0.027 -0.374 0.708
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with productiveness change score (ideal-self) is not significantly different from zero, r = -0.027, p = 0.708.

6.5.2.31 Productiveness - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7892.577 7976.554 0.879 0.113 0.137
# parameters of interest
params_lcs_produ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.002 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.594 NA NA
d_produ_1 ~1 -0.123 -0.198 -0.049 -0.300 -3.256 0.001
produ_t1 ~1 3.428 3.299 3.556 4.940 52.301 0.000
d_produ_1 ~~ d_produ_1 0.169 0.082 0.256 1.000 3.808 0.000
produ_t1 ~~ d_produ_1 -0.085 -0.154 -0.017 -0.299 -2.430 0.015
d_produ_1 ~~ sa07_08_t1 0.100 -0.007 0.207 0.177 1.833 0.067
sa07_08_t1 ~~ sa07_08_t1 1.880 1.691 2.069 1.000 19.477 0.000

Correlation of specific, facet-level acceptance goals with productiveness change score (current-self) is not significantly different from zero, r = 0.177, p = 0.067.

6.5.2.32 Productiveness - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6372.494 6456.471 0.911 0.068 0.066
# parameters of interest
params_lcs_produ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.047 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.677 NA NA
d_produ_1 ~1 -0.028 -0.075 0.019 -0.117 -1.168 0.243
produ_t1 ~1 1.585 1.507 1.663 4.286 39.886 0.000
d_produ_1 ~~ d_produ_1 0.057 0.009 0.105 1.000 2.324 0.020
produ_t1 ~~ d_produ_1 -0.035 -0.071 0.002 -0.391 -1.852 0.064
d_produ_1 ~~ sa07_08_t1 0.050 -0.005 0.105 0.153 1.789 0.074
sa07_08_t1 ~~ sa07_08_t1 1.880 1.691 2.069 1.000 19.477 0.000

Correlation of specific, facet-level acceptance goals with productiveness change score (ideal-self) is not significantly different from zero, r = 0.153, p = 0.074.

6.5.2.33 Responsibility - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7705.316 7789.293 0.871 0.104 0.093
# parameters of interest
params_lcs_respo_curr_hyp5 <- broom::tidy(fit_mi_lcs_respo_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.018 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.510 NA NA
d_respo_1 ~1 0.019 -0.017 0.056 0.105 1.044 0.297
respo_t1 ~1 3.659 3.557 3.760 10.024 70.694 0.000
d_respo_1 ~~ d_respo_1 0.033 0.001 0.066 1.000 2.012 0.044
respo_t1 ~~ d_respo_1 -0.019 -0.039 0.001 -0.286 -1.850 0.064
d_respo_1 ~~ sa06_01_t1 -0.009 -0.037 0.018 -0.058 -0.668 0.504
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with responsibility change score (current-self) is not significantly different from zero, r = -0.058, p = 0.504.

6.5.2.34 Responsibility - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6906.534 6990.51 0.964 0.044 0.053
# parameters of interest
params_lcs_respo_ideal_hyp5 <- broom::tidy(fit_mi_lcs_respo_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.917 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.628 NA NA
d_respo_1 ~1 0.020 -0.035 0.074 0.072 0.714 0.475
respo_t1 ~1 4.238 4.134 4.342 10.536 79.921 0.000
d_respo_1 ~~ d_respo_1 0.076 0.018 0.134 1.000 2.556 0.011
respo_t1 ~~ d_respo_1 -0.023 -0.060 0.015 -0.204 -1.175 0.240
d_respo_1 ~~ sa06_01_t1 0.035 -0.006 0.076 0.143 1.685 0.092
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with responsibility change score (ideal-self) is not significantly different from zero, r = 0.143, p = 0.092.

6.5.2.35 Responsibility - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8022.652 8106.628 0.813 0.129 0.136
# parameters of interest
params_lcs_respo_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.053 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.558 NA NA
d_respo_1 ~1 0.020 -0.017 0.056 0.100 1.048 0.295
respo_t1 ~1 3.659 3.557 3.760 9.965 70.676 0.000
d_respo_1 ~~ d_respo_1 0.038 0.001 0.074 1.000 2.039 0.041
respo_t1 ~~ d_respo_1 -0.026 -0.052 0.000 -0.358 -1.927 0.054
d_respo_1 ~~ sa07_09_t1 -0.048 -0.111 0.015 -0.173 -1.505 0.132
sa07_09_t1 ~~ sa07_09_t1 2.069 1.860 2.278 1.000 19.415 0.000

The correlation of specific, facet-level acceptance goals with the responsibility change score (current-self) is not significantly different from zero, r = -0.173, p = 0.132.

6.5.2.36 Responsibility - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7226.383 7310.359 0.958 0.047 0.052
# parameters of interest
params_lcs_respo_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.917 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.630 NA NA
d_respo_1 ~1 0.017 -0.036 0.070 0.063 0.617 0.537
respo_t1 ~1 4.239 4.135 4.343 10.867 79.964 0.000
d_respo_1 ~~ d_respo_1 0.072 0.016 0.128 1.000 2.515 0.012
respo_t1 ~~ d_respo_1 -0.021 -0.057 0.014 -0.205 -1.193 0.233
d_respo_1 ~~ sa07_09_t1 -0.059 -0.127 0.009 -0.152 -1.689 0.091
sa07_09_t1 ~~ sa07_09_t1 2.069 1.860 2.278 1.000 19.415 0.000

Correlation of specific, facet-level acceptance goals with responsibility change score (ideal-self) is not significantly different from zero, r = -0.152, p = 0.091.

6.5.2.37 Anxiety - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7886.698 7970.675 0.983 0.04 0.068
# parameters of interest
params_lcs_anxie_curr_hyp5 <- broom::tidy(fit_mi_lcs_anxie_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.976 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.423 NA NA
d_anxie_1 ~1 0.189 0.103 0.275 0.458 4.304 0.000
anxie_t1 ~1 2.877 2.745 3.008 3.031 42.808 0.000
d_anxie_1 ~~ d_anxie_1 0.170 0.072 0.268 1.000 3.402 0.001
anxie_t1 ~~ d_anxie_1 -0.062 -0.146 0.022 -0.159 -1.449 0.147
d_anxie_1 ~~ sa06_01_t1 0.027 -0.042 0.096 0.074 0.778 0.437
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with anxiety change score (current-self) is not significantly different from zero, r = 0.074, p = 0.437.

6.5.2.38 Anxiety - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7670.394 7754.371 0.923 0.049 0.061
# parameters of interest
params_lcs_anxie_ideal_hyp5 <- broom::tidy(fit_mi_lcs_anxie_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.185 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.739 NA NA
d_anxie_1 ~1 0.019 -0.039 0.077 0.076 0.651 0.515
anxie_t1 ~1 4.530 4.451 4.610 11.094 111.900 0.000
d_anxie_1 ~~ d_anxie_1 0.065 -0.004 0.133 1.000 1.857 0.063
anxie_t1 ~~ d_anxie_1 -0.056 -0.119 0.006 -0.543 -1.760 0.078
d_anxie_1 ~~ sa06_01_t1 0.012 -0.040 0.065 0.055 0.469 0.639
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with anxiety change score (ideal-self) is not significantly different from zero, r = 0.055, p = 0.639.

6.5.2.39 Anxiety - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8207.505 8291.481 0.952 0.068 0.105
# parameters of interest
params_lcs_anxie_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.022 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.476 NA NA
d_anxie_1 ~1 0.187 0.103 0.272 0.426 4.344 0.000
anxie_t1 ~1 2.877 2.746 3.009 3.048 42.841 0.000
d_anxie_1 ~~ d_anxie_1 0.193 0.088 0.298 1.000 3.603 0.000
anxie_t1 ~~ d_anxie_1 -0.115 -0.204 -0.027 -0.278 -2.557 0.011
d_anxie_1 ~~ sa07_10_t1 -0.165 -0.287 -0.043 -0.258 -2.652 0.008
sa07_10_t1 ~~ sa07_10_t1 2.115 1.921 2.308 1.000 21.431 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (current-self) is significantly different from zero, r = -0.258, p = 0.008.

6.5.2.40 Anxiety - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7998.05 8082.026 0.924 0.049 0.058
# parameters of interest
params_lcs_anxie_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.180 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.730 NA NA
d_anxie_1 ~1 0.019 -0.039 0.077 0.076 0.651 0.515
anxie_t1 ~1 4.530 4.451 4.610 11.075 111.886 0.000
d_anxie_1 ~~ d_anxie_1 0.064 -0.004 0.132 1.000 1.849 0.064
anxie_t1 ~~ d_anxie_1 -0.056 -0.118 0.007 -0.537 -1.749 0.080
d_anxie_1 ~~ sa07_10_t1 -0.013 -0.079 0.053 -0.035 -0.387 0.698
sa07_10_t1 ~~ sa07_10_t1 2.115 1.921 2.308 1.000 21.431 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (ideal-self) is not significantly different from zero, r = -0.035, p = 0.698.

6.5.2.41 Depression - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7801.948 7885.924 0.946 0.081 0.077
# parameters of interest
params_lcs_depre_curr_hyp5 <- broom::tidy(fit_mi_lcs_depre_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.984 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.504 NA NA
d_depre_1 ~1 0.126 0.073 0.180 0.445 4.616 0.000
depre_t1 ~1 3.026 2.909 3.143 5.476 50.760 0.000
d_depre_1 ~~ d_depre_1 0.080 0.043 0.118 1.000 4.214 0.000
depre_t1 ~~ d_depre_1 -0.035 -0.061 -0.009 -0.223 -2.607 0.009
d_depre_1 ~~ sa06_01_t1 0.006 -0.030 0.042 0.024 0.327 0.744
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with depression change score (current-self) is not significantly different from zero, r = 0.024, p = 0.744.

6.5.2.42 Depression - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6096.322 6180.299 0.897 0.072 0.075
# parameters of interest
params_lcs_depre_ideal_hyp5 <- broom::tidy(fit_mi_lcs_depre_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.157 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.701 NA NA
d_depre_1 ~1 0.006 -0.045 0.058 0.023 0.233 0.816
depre_t1 ~1 4.443 4.368 4.519 10.154 115.576 0.000
d_depre_1 ~~ d_depre_1 0.070 0.012 0.129 1.000 2.345 0.019
depre_t1 ~~ d_depre_1 -0.059 -0.108 -0.010 -0.512 -2.380 0.017
d_depre_1 ~~ sa06_01_t1 0.002 -0.041 0.045 0.010 0.106 0.916
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with depression change score (ideal-self) is not significantly different from zero, r = 0.01, p = 0.916.

6.5.2.43 Depression - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8124.898 8208.874 0.905 0.11 0.129
# parameters of interest
params_lcs_depre_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.015 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.540 NA NA
d_depre_1 ~1 0.126 0.073 0.179 0.431 4.645 0.000
depre_t1 ~1 3.026 2.909 3.143 5.513 50.768 0.000
d_depre_1 ~~ d_depre_1 0.085 0.046 0.124 1.000 4.253 0.000
depre_t1 ~~ d_depre_1 -0.047 -0.076 -0.018 -0.294 -3.218 0.001
d_depre_1 ~~ sa07_11_t1 -0.063 -0.130 0.004 -0.149 -1.847 0.065
sa07_11_t1 ~~ sa07_11_t1 2.106 1.918 2.294 1.000 21.989 0.000

Correlation of specific, facet-level acceptance goals with depression change score (current-self) is not significantly different from zero, r = -0.149, p = 0.065.

6.5.2.44 Depression - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6422.351 6506.327 0.942 0.053 0.052
# parameters of interest
params_lcs_depre_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.157 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.700 NA NA
d_depre_1 ~1 0.006 -0.045 0.058 0.024 0.237 0.813
depre_t1 ~1 4.443 4.368 4.519 10.154 115.575 0.000
d_depre_1 ~~ d_depre_1 0.070 0.012 0.128 1.000 2.358 0.018
depre_t1 ~~ d_depre_1 -0.059 -0.108 -0.011 -0.511 -2.394 0.017
d_depre_1 ~~ sa07_11_t1 -0.008 -0.069 0.053 -0.021 -0.259 0.795
sa07_11_t1 ~~ sa07_11_t1 2.106 1.918 2.294 1.000 21.989 0.000

Correlation of specific, facet-level acceptance goals with depression change score (ideal-self) is not significantly different from zero, r = -0.021, p = 0.795.

6.5.2.45 Volatility - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7960.547 8044.524 0.986 0.037 0.056
# parameters of interest
params_lcs_volat_curr_hyp5 <- broom::tidy(fit_mi_lcs_volat_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.058 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.453 NA NA
d_volat_1 ~1 -0.133 -0.213 -0.053 -0.325 -3.255 0.001
volat_t1 ~1 3.119 2.986 3.251 3.275 45.995 0.000
d_volat_1 ~~ d_volat_1 0.166 0.069 0.263 1.000 3.369 0.001
volat_t1 ~~ d_volat_1 -0.132 -0.211 -0.053 -0.339 -3.277 0.001
d_volat_1 ~~ sa06_01_t1 0.015 -0.051 0.081 0.041 0.444 0.657
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with volatility change score (current-self) is not significantly different from zero, r = 0.041, p = 0.657.

6.5.2.46 Volatility - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7153.372 7237.349 0.945 0.045 0.056
# parameters of interest
params_lcs_volat_ideal_hyp5 <- broom::tidy(fit_mi_lcs_volat_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.025 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.581 NA NA
d_volat_1 ~1 -0.010 -0.073 0.053 -0.038 -0.308 0.758
volat_t1 ~1 1.647 1.567 1.727 3.596 40.325 0.000
d_volat_1 ~~ d_volat_1 0.067 0.001 0.134 1.000 1.977 0.048
volat_t1 ~~ d_volat_1 -0.039 -0.088 0.010 -0.326 -1.555 0.120
d_volat_1 ~~ sa06_01_t1 -0.028 -0.078 0.021 -0.123 -1.124 0.261
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

The correlation of general acceptance goal with the volatility change score (ideal-self) is not significantly different from zero, r = -0.123, p = 0.261.

6.5.2.47 Volatility - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8215.89 8299.867 0.941 0.078 0.111
# parameters of interest
params_lcs_volat_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.071 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.467 NA NA
d_volat_1 ~1 -0.133 -0.212 -0.053 -0.319 -3.254 0.001
volat_t1 ~1 3.119 2.986 3.251 3.276 45.998 0.000
d_volat_1 ~~ d_volat_1 0.173 0.073 0.272 1.000 3.406 0.001
volat_t1 ~~ d_volat_1 -0.144 -0.233 -0.056 -0.365 -3.208 0.001
d_volat_1 ~~ sa07_12_t1 0.045 -0.067 0.158 0.084 0.789 0.430
sa07_12_t1 ~~ sa07_12_t1 1.709 1.531 1.887 1.000 18.847 0.000

Correlation of specific, facet-level acceptance goals with volatility change score (current-self) is not significantly different from zero, r = 0.084, p = 0.43.

6.5.2.48 Volatility - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7410.458 7494.434 0.929 0.052 0.064
# parameters of interest
params_lcs_volat_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.015 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.562 NA NA
d_volat_1 ~1 -0.009 -0.072 0.054 -0.036 -0.285 0.776
volat_t1 ~1 1.646 1.566 1.726 3.588 40.318 0.000
d_volat_1 ~~ d_volat_1 0.065 -0.001 0.130 1.000 1.923 0.054
volat_t1 ~~ d_volat_1 -0.035 -0.083 0.012 -0.303 -1.449 0.147
d_volat_1 ~~ sa07_12_t1 -0.012 -0.076 0.051 -0.037 -0.383 0.701
sa07_12_t1 ~~ sa07_12_t1 1.709 1.531 1.887 1.000 18.847 0.000

Correlation of specific, facet-level acceptance goals with volatility change score (ideal-self) is not significantly different from zero, r = -0.037, p = 0.701.

6.5.2.49 Curiosity - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7619.251 7703.228 0.984 0.035 0.046
# parameters of interest
params_lcs_curio_curr_hyp5 <- broom::tidy(fit_mi_lcs_curio_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.084 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 NA NA NA
d_curio_1 ~1 0.059 0.013 0.105 NA 2.498 0.013
curio_t1 ~1 4.032 3.933 4.132 7.224 79.614 0.000
d_curio_1 ~~ d_curio_1 -0.012 -0.049 0.024 NA -0.667 0.505
curio_t1 ~~ d_curio_1 -0.017 -0.050 0.016 -0.274 -1.008 0.313
d_curio_1 ~~ sa06_01_t1 0.000 -0.035 0.034 -0.005 -0.027 0.978
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with curiosity change score (current-self) is not significantly different from zero, r = -0.005, p = 0.978.

6.5.2.50 Curiosity - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7555.914 7639.89 0.967 0.037 0.054
# parameters of interest
params_lcs_curio_ideal_hyp5 <- broom::tidy(fit_mi_lcs_curio_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.076 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.530 NA NA
d_curio_1 ~1 0.017 -0.036 0.070 0.082 0.618 0.537
curio_t1 ~1 4.457 4.382 4.533 10.770 116.320 0.000
d_curio_1 ~~ d_curio_1 0.042 -0.006 0.089 1.000 1.700 0.089
curio_t1 ~~ d_curio_1 -0.032 -0.071 0.006 -0.384 -1.664 0.096
d_curio_1 ~~ sa06_01_t1 -0.032 -0.068 0.004 -0.175 -1.739 0.082
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with curiosity change score (ideal-self) is not significantly different from zero, r = -0.175, p = 0.082.

6.5.2.51 Curiosity - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7877.453 7961.429 0.951 0.062 0.086
# parameters of interest
params_lcs_curio_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.074 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 NA NA NA
d_curio_1 ~1 0.058 0.013 0.104 NA 2.507 0.012
curio_t1 ~1 4.033 3.933 4.132 7.264 79.624 0.000
d_curio_1 ~~ d_curio_1 -0.013 -0.049 0.023 NA -0.729 0.466
curio_t1 ~~ d_curio_1 -0.014 -0.047 0.019 -0.214 -0.820 0.412
d_curio_1 ~~ sa07_13_t1 0.023 -0.032 0.077 0.149 0.819 0.413
sa07_13_t1 ~~ sa07_13_t1 1.724 1.530 1.918 1.000 17.438 0.000

The correlation of specific, facet-level acceptance goals with the curiosity change score (current-self) is not significantly different from zero, r = 0.149, p = 0.413.

6.5.2.52 Curiosity - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7816.78 7900.757 0.942 0.05 0.067
# parameters of interest
params_lcs_curio_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.090 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.554 NA NA
d_curio_1 ~1 0.017 -0.036 0.069 0.080 0.616 0.538
curio_t1 ~1 4.458 4.383 4.533 10.864 116.520 0.000
d_curio_1 ~~ d_curio_1 0.043 -0.007 0.094 1.000 1.702 0.089
curio_t1 ~~ d_curio_1 -0.035 -0.076 0.005 -0.411 -1.695 0.090
d_curio_1 ~~ sa07_13_t1 -0.019 -0.077 0.039 -0.070 -0.648 0.517
sa07_13_t1 ~~ sa07_13_t1 1.724 1.530 1.918 1.000 17.438 0.000

Correlation of specific, facet-level acceptance goals with curiosity change score (ideal-self) is not significantly different from zero, r = -0.07, p = 0.517.

6.5.2.53 Aesthetic - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7922.328 8006.304 0.99 0.029 0.055
# parameters of interest
params_lcs_aesth_curr_hyp5 <- broom::tidy(fit_mi_lcs_aesth_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.994 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.376 NA NA
d_aesth_1 ~1 0.001 -0.027 0.030 0.010 0.087 0.931
aesth_t1 ~1 2.848 2.725 2.970 8.375 45.474 0.000
d_aesth_1 ~~ d_aesth_1 0.017 -0.005 0.038 1.000 1.478 0.140
aesth_t1 ~~ d_aesth_1 -0.008 -0.020 0.005 -0.174 -1.179 0.238
d_aesth_1 ~~ sa06_01_t1 0.004 -0.018 0.026 0.038 0.383 0.701
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with aesthetic change score (current-self) is not significantly different from zero, r = 0.038, p = 0.701.

6.5.2.54 Aesthetic - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7584.606 7668.583 0.952 0.055 0.063
# parameters of interest
params_lcs_aesth_ideal_hyp5 <- broom::tidy(fit_mi_lcs_aesth_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.964 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.602 NA NA
d_aesth_1 ~1 -0.020 -0.053 0.014 -0.118 -1.157 0.247
aesth_t1 ~1 2.903 2.767 3.038 10.931 42.046 0.000
d_aesth_1 ~~ d_aesth_1 0.028 -0.002 0.057 1.000 1.847 0.065
aesth_t1 ~~ d_aesth_1 -0.011 -0.028 0.006 -0.251 -1.242 0.214
d_aesth_1 ~~ sa06_01_t1 0.008 -0.014 0.031 0.055 0.716 0.474
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with aesthetic change score (ideal-self) is not significantly different from zero, r = 0.055, p = 0.474.

6.5.2.55 Aesthetic - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8226.707 8310.683 0.967 0.055 0.087
# parameters of interest
params_lcs_aesth_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.020 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.407 NA NA
d_aesth_1 ~1 0.002 -0.027 0.030 0.011 0.105 0.916
aesth_t1 ~1 2.848 2.725 2.970 8.421 45.470 0.000
d_aesth_1 ~~ d_aesth_1 0.018 -0.005 0.041 1.000 1.539 0.124
aesth_t1 ~~ d_aesth_1 -0.011 -0.026 0.003 -0.249 -1.549 0.121
d_aesth_1 ~~ sa07_14_t1 0.043 0.001 0.086 0.226 1.986 0.047
sa07_14_t1 ~~ sa07_14_t1 2.002 1.823 2.180 1.000 21.957 0.000

Correlation of specific, facet-level acceptance goals with aesthetic change score (current-self) is (barely) significantly different from zero, r = 0.226, p = 0.047.

6.5.2.56 Aesthetic - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7892.858 7976.835 0.948 0.058 0.068
# parameters of interest
params_lcs_aesth_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.978 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.622 NA NA
d_aesth_1 ~1 -0.019 -0.053 0.014 -0.115 -1.148 0.251
aesth_t1 ~1 2.903 2.767 3.038 10.862 42.043 0.000
d_aesth_1 ~~ d_aesth_1 0.029 -0.002 0.059 1.000 1.854 0.064
aesth_t1 ~~ d_aesth_1 -0.013 -0.032 0.006 -0.282 -1.331 0.183
d_aesth_1 ~~ sa07_14_t1 0.021 -0.017 0.060 0.089 1.088 0.277
sa07_14_t1 ~~ sa07_14_t1 2.002 1.823 2.180 1.000 21.957 0.000

Correlation of specific, facet-level acceptance goals with aesthetic change score (ideal-self) is not significantly different from zero, r = 0.089, p = 0.277.

6.5.2.57 Imagination - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7625.283 7709.259 0.956 0.059 0.05
# parameters of interest
params_lcs_imagi_curr_hyp5 <- broom::tidy(fit_mi_lcs_imagi_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.067 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.428 NA NA
d_imagi_1 ~1 0.132 0.070 0.193 0.484 4.204 0.000
imagi_t1 ~1 3.641 3.536 3.745 5.360 68.404 0.000
d_imagi_1 ~~ d_imagi_1 0.074 -0.027 0.175 1.000 1.439 0.150
imagi_t1 ~~ d_imagi_1 -0.065 -0.139 0.009 -0.351 -1.716 0.086
d_imagi_1 ~~ sa06_01_t1 -0.008 -0.053 0.036 -0.034 -0.366 0.715
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with imagination change score (current-self) is not significantly different from zero, r = -0.034, p = 0.715.

6.5.2.58 Imagination - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7122.125 7206.101 0.925 0.061 0.06
# parameters of interest
params_lcs_imagi_ideal_hyp5 <- broom::tidy(fit_mi_lcs_imagi_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.036 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.640 NA NA
d_imagi_1 ~1 -0.012 -0.075 0.051 -0.035 -0.359 0.720
imagi_t1 ~1 4.544 4.468 4.621 8.602 115.758 0.000
d_imagi_1 ~~ d_imagi_1 0.106 0.027 0.186 1.000 2.622 0.009
imagi_t1 ~~ d_imagi_1 -0.063 -0.125 -0.001 -0.365 -1.997 0.046
d_imagi_1 ~~ sa06_01_t1 -0.038 -0.082 0.007 -0.129 -1.664 0.096
sa06_01_t1 ~~ sa06_01_t1 0.798 0.635 0.961 1.000 9.609 0.000
sa06_01_t1 ~1 4.283 4.187 4.378 4.794 87.878 0.000

Correlation of general acceptance goal with imagination change score (ideal-self) is not significantly different from zero, r = -0.129, p = 0.096.

6.5.2.59 Imagination - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7952.997 8036.974 0.876 0.104 0.121
# parameters of interest
params_lcs_imagi_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.099 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.472 NA NA
d_imagi_1 ~1 0.131 0.070 0.193 0.450 4.193 0.000
imagi_t1 ~1 3.641 3.536 3.745 5.361 68.422 0.000
d_imagi_1 ~~ d_imagi_1 0.085 -0.020 0.190 1.000 1.586 0.113
imagi_t1 ~~ d_imagi_1 -0.082 -0.159 -0.005 -0.416 -2.097 0.036
d_imagi_1 ~~ sa07_15_t1 -0.078 -0.167 0.012 -0.182 -1.696 0.090
sa07_15_t1 ~~ sa07_15_t1 2.135 1.956 2.314 1.000 23.329 0.000

Correlation of specific, facet-level acceptance goals with imagination change score (current-self) is not significantly different from zero, r = -0.182, p = 0.09.

6.5.2.60 Imagination - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7451.466 7535.443 0.899 0.072 0.07
# parameters of interest
params_lcs_imagi_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.055 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.673 NA NA
d_imagi_1 ~1 -0.012 -0.076 0.051 -0.037 -0.383 0.702
imagi_t1 ~1 4.545 4.468 4.622 8.593 115.680 0.000
d_imagi_1 ~~ d_imagi_1 0.114 0.031 0.196 1.000 2.695 0.007
imagi_t1 ~~ d_imagi_1 -0.071 -0.134 -0.008 -0.399 -2.208 0.027
d_imagi_1 ~~ sa07_15_t1 -0.078 -0.163 0.007 -0.159 -1.809 0.070
sa07_15_t1 ~~ sa07_15_t1 2.135 1.956 2.314 1.000 23.329 0.000

Correlation of specific, facet-level acceptance goals with imagination change score (ideal-self) is not significantly different from zero, r = -0.159, p = 0.07.

6.5.3 Hyp 5: Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_hyp5 <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_ideal_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_curr_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_ideal_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_curr_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_ideal_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_curr_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_ideal_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_curr_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_ideal_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_curr_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_ideal_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_curr_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_socia_ideal_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_asser_curr_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_ideal_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_curr_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_asser_ideal_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_energ_curr_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_ideal_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_curr_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_energ_ideal_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_compa_curr_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_ideal_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_curr_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_compa_ideal_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_respe_curr_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_ideal_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_curr_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_respe_ideal_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_trust_curr_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_ideal_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_curr_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_trust_ideal_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_organ_curr_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_ideal_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_curr_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_organ_ideal_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_produ_curr_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_ideal_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_curr_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_produ_ideal_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_respo_curr_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_ideal_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_curr_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_respo_ideal_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_anxie_curr_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_ideal_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_curr_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_depre_curr_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_ideal_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_curr_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_depre_ideal_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_volat_curr_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_ideal_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_curr_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_volat_ideal_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_curio_curr_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_ideal_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_curr_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_curio_ideal_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_aesth_curr_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_ideal_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_curr_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_imagi_curr_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_ideal_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_curr_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: covariance of the latent change score and acceptance goal(s)

kable(df_table_hyp5[1:20, ], digits = 3)
trait ref goal estimate std.all statistic p.value
extraversion current general 0.008 0.035 0.446 0.656
extraversion ideal general 0.016 0.070 0.778 0.437
extraversion current specific -0.035 -0.147 -1.181 0.237
extraversion ideal specific -0.011 -0.048 -0.443 0.658
agreeableness current general -0.008 -0.042 -0.605 0.545
agreeableness ideal general 0.000 -0.001 -0.020 0.984
agreeableness current specific -0.059 -0.296 -2.392 0.017
agreeableness ideal specific -0.024 -0.094 -1.087 0.277
conscientiousness current general -0.031 -0.101 -1.418 0.156
conscientiousness ideal general 0.017 0.060 1.044 0.297
conscientiousness current specific -0.062 -0.159 -1.707 0.088
conscientiousness ideal specific -0.050 -0.148 -2.036 0.042
neuroticism current general -0.023 -0.070 -1.082 0.279
neuroticism ideal general -0.016 -0.050 -0.681 0.496
neuroticism current specific 0.066 0.178 2.121 0.034
neuroticism ideal specific 0.003 0.009 0.116 0.908
openness current general -0.014 -0.065 -0.794 0.427
openness ideal general -0.025 -0.132 -1.941 0.052
openness current specific -0.024 -0.126 -1.099 0.272
openness ideal specific -0.024 -0.140 -2.101 0.036

Four covariances significantly differ from zero (at p < .05):

  • changes in current-level agreeableness covary with the specific acceptance goals (latent factor of the three A facets)
  • changes in ideal-level conscientiousness covary with the specific acceptance goals (latent factor of the three C facets)
    changes in current-level neuroticism covary with the specific acceptance goals (latent factor of the three N facets)
  • changes in ideal-level openness covary with the specific acceptance goals (latent factor of the three O facets)

-> unexpected direction of effects!

Results summary across the Big Five facets: covariance of the latent change score and acceptance goal(s)

kable(df_table_hyp5[21:80, ], digits = 3)
trait ref goal estimate std.all statistic p.value
sociability current general 0.032 0.083 0.879 0.379
sociability ideal general -0.020 -0.118 -0.742 0.458
sociability current specific -0.066 -0.108 -1.284 0.199
sociability ideal specific -0.059 -0.239 -1.742 0.082
assertiveness current general -0.009 -0.040 -0.457 0.648
assertiveness ideal general 0.035 0.239 1.826 0.068
assertiveness current specific -0.006 -0.017 -0.164 0.870
assertiveness ideal specific 0.060 0.272 1.817 0.069
energy current general 0.003 0.018 0.245 0.806
energy ideal general -0.009 -0.062 -0.781 0.435
energy current specific 0.038 0.146 1.415 0.157
energy ideal specific -0.007 -0.032 -0.398 0.690
compassion current general -0.039 -0.111 -1.236 0.216
compassion ideal general -0.005 -0.014 -0.138 0.890
compassion current specific -0.131 -0.226 -2.053 0.040
compassion ideal specific -0.060 -0.111 -1.036 0.300
respectfulness current general -0.007 -0.022 -0.308 0.758
respectfulness ideal general -0.004 -0.029 -0.209 0.834
respectfulness current specific -0.195 -0.402 -3.818 0.000
respectfulness ideal specific -0.030 -0.152 -0.984 0.325
trust current general -0.007 -0.038 -0.283 0.777
trust ideal general -0.008 -0.034 -0.371 0.710
trust current specific -0.055 -0.193 -1.108 0.268
trust ideal specific -0.025 -0.066 -0.629 0.529
organization current general 0.074 0.178 2.143 0.032
organization ideal general 0.003 0.013 0.139 0.889
organization current specific 0.213 0.286 3.323 0.001
organization ideal specific 0.051 0.134 1.259 0.208
productiveness current general 0.031 0.090 1.111 0.267
productiveness ideal general -0.006 -0.027 -0.374 0.708
productiveness current specific 0.100 0.177 1.833 0.067
productiveness ideal specific 0.050 0.153 1.789 0.074
responsibility current general -0.009 -0.058 -0.668 0.504
responsibility ideal general 0.035 0.143 1.685 0.092
responsibility current specific -0.048 -0.173 -1.505 0.132
responsibility ideal specific -0.059 -0.152 -1.689 0.091
anxiety current general 0.027 0.074 0.778 0.437
anxiety ideal general 0.012 0.055 0.469 0.639
anxiety current specific -0.165 -0.258 -2.652 0.008
anxiety ideal specific -0.013 -0.035 -0.387 0.698
depression current general 0.006 0.024 0.327 0.744
depression ideal general 0.002 0.010 0.106 0.916
depression current specific -0.063 -0.149 -1.847 0.065
depression ideal specific -0.008 -0.021 -0.259 0.795
volatility current general 0.015 0.041 0.444 0.657
volatility ideal general -0.028 -0.123 -1.124 0.261
volatility current specific 0.045 0.084 0.789 0.430
volatility ideal specific -0.012 -0.037 -0.383 0.701
curiosity current general 0.000 -0.005 -0.027 0.978
curiosity ideal general -0.032 -0.175 -1.739 0.082
curiosity current specific 0.023 0.149 0.819 0.413
curiosity ideal specific -0.019 -0.070 -0.648 0.517
aesthetic current general 0.004 0.038 0.383 0.701
aesthetic ideal general 0.008 0.055 0.716 0.474
aesthetic current specific 0.043 0.226 1.986 0.047
aesthetic ideal specific 0.021 0.089 1.088 0.277
imagination current general -0.008 -0.034 -0.366 0.715
imagination ideal general -0.038 -0.129 -1.664 0.096
imagination current specific -0.078 -0.182 -1.696 0.090
imagination ideal specific -0.078 -0.159 -1.809 0.070

Looking at the facets, we find five covariances that significantly differ from zero at p < .05 (relatively unsystematic across facets / current-ideal / goal dimension):
- Changes in current-level compassion and respectfulness covary with the respective facet-specific acceptance goal.
- Further, changes in current-level organization covary with the general acceptance goal and the specific facet acceptance goal.
- Changes in current-level anxiety covary with the specific facet acceptance goal.

Prepare data frame for plotting:

Show the code
df_table_hyp5_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_ideal_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_curr_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_ideal_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_curr_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_ideal_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_curr_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_ideal_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_curr_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_ideal_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_curr_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_ideal_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_curr_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_socia_ideal_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_asser_curr_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_ideal_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_curr_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_asser_ideal_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_energ_curr_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_ideal_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_curr_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_energ_ideal_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_compa_curr_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_ideal_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_curr_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_compa_ideal_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_respe_curr_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_ideal_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_curr_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_respe_ideal_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_trust_curr_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_ideal_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_curr_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_trust_ideal_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_organ_curr_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_ideal_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_curr_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_organ_ideal_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_produ_curr_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_ideal_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_curr_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_produ_ideal_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_respo_curr_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_ideal_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_curr_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_respo_ideal_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_anxie_curr_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_ideal_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_curr_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_depre_curr_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_ideal_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_curr_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_depre_ideal_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_volat_curr_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_ideal_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_curr_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_volat_ideal_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_curio_curr_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_ideal_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_curr_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_curio_ideal_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_aesth_curr_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_ideal_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_curr_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_imagi_curr_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_ideal_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_curr_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp5_plot <- df_table_hyp5_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor(ref, levels = c("current", "ideal"), labels = c("current", "ideal"))) %>% 
  mutate(goal = factor(goal, levels = c("general", "specific"), labels = c("general", "specific"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • current = current-level personality
  • ideal = ideal-level personality
  • general = general acceptance goal
  • specific = specific, facet-level acceptance goal(s)
Show the code
ggplot(df_table_hyp5_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + goal, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.6 H6: Desire to change and frequency of self-improvement behaviors as moderators of change in personality in self-improvement group (H2 in paper)

In the self-improvement group, change in current-self ratings but not change in ideal-self ratings will be moderated by change goals (both general and trait-/facet-specific goals) and the frequency of self-improvement behaviors.

We will test this one domain/facet at a time. To test this hypothesis, we will estimate the mean-level difference across time for both current and ideal trait ratings using latent change models and specify change goals (or the frequency of self-improvement behaviors) as a moderator of latent trait change. We will check in a second set of models whether changes in current-self ratings persist from T2 to T3.

Reshape and split data set by intervention group:

Show the code
# from T1 to T2
df_sbsa2_wide_pers_sb_mod <- df_sbsa2 %>% 
  filter(rando=="Self-Improvement" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07", # facet-specific change goals
                                  "sb04"))) %>% # frequency self-improvement behaviors
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sb07", "sb04")))) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, 
            sb04_01_t1, sb04_02_t1, sb04_03_t1)) # frequency of self-improvement behaviors measured at T2
# colnames(df_sbsa2_wide_pers_sb_mod)

group_assign <- df_sbsa2 %>% select(pid, rando) %>% unique()

df_sbsa2_wide_pers_sb_mod <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Improvement") %>% select(-rando, -ends_with("_t3")) %>%
  left_join(df_sbsa2_wide_pers_sb_mod)

# follow-up, from T2 to T3
df_sbsa2_wide_pers_sb_mod_fu <- df_sbsa2 %>% 
  filter(rando=="Self-Improvement" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07", # facet-specific change goals -> asked at T1
                                  "sb04"))) %>% # frequency self-improvement behaviors -> asked at T2
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sb07", "sb04")))) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, 
            sb04_01_t1, sb04_02_t1, sb04_03_t1)) # frequency of self-improvement behaviors measured at T2
# colnames(df_sbsa2_wide_pers_sb_mod_fu)

df_sbsa2_wide_pers_sb_mod_fu <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Improvement" & !is.na(valid_t2)) %>% select(-rando, -ends_with("_t1")) %>%
  left_join(df_sbsa2_wide_pers_sb_mod_fu)

6.6.1 Big Five traits (run models)

Run models for all traits with templates & loops:

Show the code
# create templates:

# 1st, for facet-specific change goals

trait_template_mod_goal <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ goals           # This estimates the moderation effect on personality at T1
d_trait_1 ~ goals          # This estimates the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

trait_facets_nrs <- list(a1 = c(1:3), b2 = c(4:6), c3 = c(7:9), d4 = c(10:12), e5 = c(13:15)) # matching facet nrs to traits 

# loop across 5 traits -> change in current-self ratings
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  mod_names = paste0("sb07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3"), 
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], 
                                         "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), trait_model_fit))
}  

# loop across 5 traits -> change in *ideal*-self ratings (not hypothesis-conform)
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  mod_names = paste0("sb07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), # ideal instead of current!
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3"), 
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], 
                                         "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp6")), template_filled)) # ideal instead of curr
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp6")), trait_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for current self ratings)

trait_template_mod_goal_fu <- '
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 
trait_t3 =~ 1*ind01_t3 + lamb2*ind02_t3 + lamb3*ind03_t3 # This specifies the measurement model for trait_t3 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t3 ~ 1*trait_t2     # This parameter regresses trait_t3 perfectly on trait_t2
d_trait_1 =~ 1*trait_t3   # This defines the latent change score factor as measured perfectly by scores on trait_t3
trait_t3 ~ 0*1            # This line constrains the intercept of trait_t3 to 0
trait_t3 ~~ 0*trait_t3    # This fixes the variance of trait_t3 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t2 ~ 1               # This estimates the intercept of trait_t2 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t2 ~~ trait_t2         # This estimates the variance of trait_t2 
trait_t2 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t2 ~ goals           # This estimates the moderation effect on personality at T2
d_trait_1 ~ goals          # This estimates the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t2 ~~ ind01_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind02_t2 ~~ ind02_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind03_t2 ~~ ind03_t3   # This allows residual covariance on indicator X3 across T2 and T3

ind01_t2 ~~ res1*ind01_t2   # This allows residual variance on indicator X1 at T2
ind02_t2 ~~ res2*ind02_t2   # This allows residual variance on indicator X2 at T2
ind03_t2 ~~ res3*ind03_t2   # This allows residual variance on indicator X3 at T2

ind01_t3 ~~ res1*ind01_t3  # This allows residual variance on indicator X1 at T3 
ind02_t3 ~~ res2*ind02_t3  # This allows residual variance on indicator X2 at T3 
ind03_t3 ~~ res3*ind03_t3  # This allows residual variance on indicator X3 at T3

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind01_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind02_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind03_t3 ~ m3*1     # This estimates the intercept of X3 at T3

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

# loop across 5 traits -> change in current-self ratings
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  mod_names = paste0("sb07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal_fu, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3"), 
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], 
                                         "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6_fu")), trait_model_fit))
}  

# 2nd, for frequency of self-improvement behavior

trait_template_mod_frequ <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for extra_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_trait_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), trait_model_fit))
}  

# loop across 5 traits -> change in *ideal*-self ratings (not hypothesis-conform)
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"),  # ideal instead of current!
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp6")), template_filled)) # ideal instead of curr
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp6")), trait_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for current self ratings)

trait_template_mod_frequ_fu <- '
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 
trait_t3 =~ 1*ind01_t3 + lamb2*ind02_t3 + lamb3*ind03_t3 # This specifies the measurement model for extra_t3 with the equality constrained factor loadings

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

trait_t3 ~ 1*trait_t2     # This parameter regresses trait_t3 perfectly on trait_t2
d_trait_1 =~ 1*trait_t3   # This defines the latent change score factor as measured perfectly by scores on trait_t3
trait_t3 ~ 0*1            # This line constrains the intercept of trait_t3 to 0
trait_t3 ~~ 0*trait_t3    # This fixes the variance of trait_t3 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t2 ~ 1               # This estimates the intercept of trait_t2 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t2 ~~ trait_t2         # This estimates the variance of trait_t2 
trait_t2 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t2 ~ frequ           # This estimates the moderation effect on personality at T2
d_trait_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t2 ~~ ind01_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind02_t2 ~~ ind02_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind03_t2 ~~ ind03_t3   # This allows residual covariance on indicator X3 across T2 and T3

ind01_t2 ~~ res1*ind01_t2   # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2   # This allows residual variance on indicator X2 at T2
ind03_t2 ~~ res3*ind03_t2   # This allows residual variance on indicator X3 at T2

ind01_t3 ~~ res1*ind01_t3  # This allows residual variance on indicator X1 at T3 
ind02_t3 ~~ res2*ind02_t3  # This allows residual variance on indicator X2 at T3 
ind03_t3 ~~ res3*ind03_t3  # This allows residual variance on indicator X3 at T3

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind01_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind02_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind03_t3 ~ m3*1     # This estimates the intercept of X3 at T3

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ_fu, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6_fu")), trait_model_fit))
}  

6.6.2 Big Five traits (current self)

6.6.2.1 Extraversion: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 6891.241 6990.64 0.941 0.088 0.049
# parameters of interest
params_lcs_extra_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.080 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.525 NA NA
d_extra_1 ~1 0.098 0.043 0.152 0.335 3.513 0.000
extra_t1 ~1 2.987 2.901 3.073 4.990 67.877 0.000
d_extra_1 ~~ d_extra_1 0.082 0.041 0.123 0.970 3.905 0.000
extra_t1 ~~ d_extra_1 -0.046 -0.083 -0.009 -0.389 -2.445 0.014
extra_t1 ~ goals -0.579 -0.805 -0.353 -0.725 -5.019 0.000
d_extra_1 ~ goals 0.067 -0.038 0.172 0.173 1.255 0.209
goals ~~ goals 0.562 0.296 0.828 1.000 4.145 0.000

The moderation effect of specific, facet-level change goals with the extraversion change score (current-self) is not significantly different from zero, b = 0.067, p = 0.209.

6.6.2.2 Extraversion: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5919.022 6018.422 0.972 0.062 0.043
# parameters of interest
params_lcs_extra_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_extra_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.080 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.524 NA NA
d_extra_1 ~1 0.096 0.041 0.152 0.333 3.432 0.001
extra_t1 ~1 2.987 2.901 3.073 5.000 67.984 0.000
d_extra_1 ~~ d_extra_1 0.078 0.038 0.118 0.930 3.833 0.000
extra_t1 ~~ d_extra_1 -0.070 -0.107 -0.033 -0.418 -3.674 0.000
extra_t1 ~ frequ 0.049 -0.098 0.195 0.051 0.651 0.515
d_extra_1 ~ frequ 0.123 0.037 0.209 0.265 2.802 0.005
frequ ~~ frequ 0.391 0.253 0.529 1.000 5.553 0.000

The frequency of self-improvement behaviors significantly moderates changes in extraversion (current-self), b = 0.123, p = 0.005.

6.6.2.3 Agreeableness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 6241.705 6341.104 1 0 0.033
# parameters of interest
params_lcs_agree_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.074 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.535 NA NA
d_agree_1 ~1 0.020 -0.015 0.056 0.100 1.123 0.261
agree_t1 ~1 3.463 3.395 3.531 8.489 99.804 0.000
d_agree_1 ~~ d_agree_1 0.040 0.015 0.065 0.981 3.173 0.002
agree_t1 ~~ d_agree_1 -0.028 -0.049 -0.007 -0.360 -2.587 0.010
agree_t1 ~ goals -0.146 -0.219 -0.073 -0.330 -3.911 0.000
d_agree_1 ~ goals 0.031 -0.017 0.078 0.139 1.267 0.205
goals ~~ goals 0.852 0.558 1.146 1.000 5.688 0.000

The moderation effect of specific, facet-level change goals with the agreeableness change score (current-self) is not significantly different from zero, b = 0.031, p = 0.205.

6.6.2.4 Agreeableness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5242.916 5342.316 0.989 0.033 0.041
# parameters of interest
params_lcs_agree_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_agree_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.086 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.540 NA NA
d_agree_1 ~1 0.022 -0.017 0.060 0.101 1.106 0.269
agree_t1 ~1 3.462 3.394 3.530 8.023 99.324 0.000
d_agree_1 ~~ d_agree_1 0.046 0.018 0.074 0.998 3.198 0.001
agree_t1 ~~ d_agree_1 -0.038 -0.063 -0.014 -0.436 -3.093 0.002
agree_t1 ~ frequ 0.209 0.084 0.334 0.307 3.264 0.001
d_agree_1 ~ frequ 0.014 -0.059 0.086 0.040 0.367 0.714
frequ ~~ frequ 0.402 0.264 0.540 1.000 5.709 0.000

The moderation effect of the frequency of self-improvement behaviors with the agreeableness change score (current-self) is not significantly different from zero, b = 0.014, p = 0.714.

6.6.2.5 Conscientiousness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 6354.925 6454.324 0.989 0.05 0.031
# parameters of interest
params_lcs_consc_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.997 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.533 NA NA
d_consc_1 ~1 0.106 0.049 0.163 0.256 3.654 0.000
consc_t1 ~1 3.378 3.287 3.469 4.353 72.745 0.000
d_consc_1 ~~ d_consc_1 0.171 0.082 0.259 0.991 3.787 0.000
consc_t1 ~~ d_consc_1 -0.063 -0.112 -0.015 -0.274 -2.560 0.010
consc_t1 ~ goals -0.447 -0.515 -0.380 -0.693 -12.973 0.000
d_consc_1 ~ goals 0.032 -0.016 0.080 0.093 1.296 0.195
goals ~~ goals 1.445 1.175 1.715 1.000 10.490 0.000

The moderation effect of specific, facet-level change goals with the conscientiousness change score (current-self) is not significantly different from zero, b = 0.032, p = 0.195.

6.6.2.6 Conscientiousness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5522.336 5621.736 0.992 0.038 0.031
# parameters of interest
params_lcs_consc_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_consc_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.996 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.533 NA NA
d_consc_1 ~1 0.103 0.047 0.160 0.252 3.569 0.000
consc_t1 ~1 3.378 3.287 3.469 4.405 72.829 0.000
d_consc_1 ~~ d_consc_1 0.168 0.080 0.256 0.995 3.728 0.000
consc_t1 ~~ d_consc_1 -0.084 -0.139 -0.030 -0.270 -3.026 0.002
consc_t1 ~ frequ 0.136 -0.040 0.313 0.111 1.511 0.131
d_consc_1 ~ frequ 0.047 -0.062 0.157 0.072 0.846 0.398
frequ ~~ frequ 0.393 0.253 0.532 1.000 5.525 0.000

The moderation effect of the frequency of self-improvement behaviors with the conscientiousness change score (current-self) is not significantly different from zero, b = 0.047, p = 0.398.

6.6.2.7 Neuroticism: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 6722.804 6822.203 0.99 0.047 0.029
# parameters of interest
params_lcs_neuro_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.070 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.586 NA NA
d_neuro_1 ~1 -0.179 -0.242 -0.116 -0.387 -5.552 0.000
neuro_t1 ~1 3.276 3.179 3.372 3.890 66.638 0.000
d_neuro_1 ~~ d_neuro_1 0.206 0.150 0.263 0.970 7.210 0.000
neuro_t1 ~~ d_neuro_1 -0.103 -0.152 -0.054 -0.388 -4.130 0.000
neuro_t1 ~ goals 0.532 0.443 0.622 0.718 11.663 0.000
d_neuro_1 ~ goals -0.070 -0.131 -0.009 -0.173 -2.235 0.025
goals ~~ goals 1.291 0.989 1.592 1.000 8.394 0.000

The moderation effect of specific, facet-level change goals with the neuroticism change score (current-self) is not significantly different from zero, b = -0.07, p = 0.025.

6.6.2.8 Neuroticism: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5761.746 5861.145 0.992 0.04 0.038
# parameters of interest
params_lcs_neuro_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_neuro_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.071 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.588 NA NA
d_neuro_1 ~1 -0.180 -0.243 -0.117 -0.391 -5.602 0.000
neuro_t1 ~1 3.276 3.179 3.372 3.897 66.619 0.000
d_neuro_1 ~~ d_neuro_1 0.212 0.155 0.270 0.997 7.216 0.000
neuro_t1 ~~ d_neuro_1 -0.153 -0.211 -0.094 -0.394 -5.088 0.000
neuro_t1 ~ frequ -0.050 -0.243 0.144 -0.037 -0.503 0.615
d_neuro_1 ~ frequ -0.038 -0.154 0.079 -0.051 -0.631 0.528
frequ ~~ frequ 0.393 0.254 0.533 1.000 5.513 0.000

The moderation effect of the frequency of self-improvement behaviors with the neuroticism change score (current-self) is not significantly different from zero, b = -0.038, p = 0.528.

6.6.2.9 Openness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 6284.378 6383.777 0.983 0.052 0.037
# parameters of interest
params_lcs_openn_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.996 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.455 NA NA
d_openn_1 ~1 0.080 0.032 0.128 0.299 3.286 0.001
openn_t1 ~1 3.485 3.409 3.560 5.931 90.550 0.000
d_openn_1 ~~ d_openn_1 0.072 0.038 0.106 1.000 4.167 0.000
openn_t1 ~~ d_openn_1 -0.034 -0.068 0.001 -0.225 -1.927 0.054
openn_t1 ~ goals -0.248 -0.356 -0.141 -0.335 -4.525 0.000
d_openn_1 ~ goals 0.007 -0.059 0.072 0.020 0.204 0.839
goals ~~ goals 0.628 0.411 0.845 1.000 5.672 0.000

The moderation effect of specific, facet-level change goals with the openness change score (current-self) is not significantly different from zero, b = 0.007, p = 0.839.

6.6.2.10 Openness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5464.696 5564.095 0.997 0.019 0.038
# parameters of interest
params_lcs_openn_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_openn_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.997 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.456 NA NA
d_openn_1 ~1 0.077 0.030 0.124 0.291 3.181 0.001
openn_t1 ~1 3.486 3.410 3.561 6.022 90.667 0.000
d_openn_1 ~~ d_openn_1 0.069 0.036 0.102 0.989 4.128 0.000
openn_t1 ~~ d_openn_1 -0.038 -0.071 -0.004 -0.256 -2.213 0.027
openn_t1 ~ frequ 0.221 0.081 0.361 0.238 3.095 0.002
d_openn_1 ~ frequ 0.045 -0.038 0.128 0.106 1.062 0.288
frequ ~~ frequ 0.388 0.250 0.526 1.000 5.512 0.000

The moderation effect of the frequency of self-improvement behaviors with the openness change score (current-self) is not significantly different from zero, b = 0.045, p = 0.288.

6.6.3 Big Five traits (current self - follow-up T3)

6.6.3.1 Extraversion: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5894.919 5990.604 0.984 0.046 0.04
# parameters of interest
params_lcs_extra_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t3 ~ extra_t2", "d_extra_1 =~ extra_t3", "extra_t2 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t2 ~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t2 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t3 ~ extra_t2 1.000 1.000 1.000 0.974 NA NA
d_extra_1 =~ extra_t3 1.000 1.000 1.000 0.553 NA NA
d_extra_1 ~1 0.019 -0.029 0.067 0.062 0.766 0.444
extra_t2 ~1 3.141 3.052 3.229 5.832 69.404 0.000
d_extra_1 ~~ d_extra_1 0.088 0.031 0.145 0.938 3.005 0.003
extra_t2 ~~ d_extra_1 -0.011 -0.049 0.027 -0.094 -0.566 0.571
extra_t2 ~ goals -0.440 -0.600 -0.280 -0.678 -5.385 0.000
d_extra_1 ~ goals 0.092 0.010 0.173 0.249 2.209 0.027
goals ~~ goals 0.690 0.370 1.011 1.000 4.222 0.000

The moderation effect of specific, facet-level change goals with the extraversion change score (current-self) is not significantly different from zero, b = 0.092, p = 0.027.

6.6.3.2 Extraversion: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5342.784 5438.468 0.988 0.042 0.045
# parameters of interest
params_lcs_extra_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_extra_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t3 ~ extra_t2", "d_extra_1 =~ extra_t3", "extra_t2 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t2 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t2 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t3 ~ extra_t2 1.000 1.000 1.000 0.978 NA NA
d_extra_1 =~ extra_t3 1.000 1.000 1.000 0.556 NA NA
d_extra_1 ~1 0.018 -0.032 0.068 0.057 0.697 0.486
extra_t2 ~1 3.141 3.052 3.230 5.660 69.146 0.000
d_extra_1 ~~ d_extra_1 0.099 0.037 0.161 0.999 3.137 0.002
extra_t2 ~~ d_extra_1 -0.042 -0.080 -0.003 -0.243 -2.094 0.036
extra_t2 ~ frequ 0.186 0.032 0.341 0.208 2.366 0.018
d_extra_1 ~ frequ -0.017 -0.112 0.079 -0.033 -0.339 0.735
frequ ~~ frequ 0.384 0.246 0.523 1.000 5.434 0.000

The moderation effect of the frequency of self-improvement behaviors with the extraversion change score (current-self) is not significantly different from zero, b = -0.017, p = 0.735.

6.6.3.3 Agreeableness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5370.967 5466.651 0.988 0.035 0.038
# parameters of interest
params_lcs_agree_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t3 ~ agree_t2", "d_agree_1 =~ agree_t3", "agree_t2 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t2 ~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t2 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t3 ~ agree_t2 1.000 1.000 1.000 0.983 NA NA
d_agree_1 =~ agree_t3 1.000 1.000 1.000 0.370 NA NA
d_agree_1 ~1 -0.007 -0.039 0.025 -0.052 -0.442 0.658
agree_t2 ~1 3.472 3.403 3.542 9.551 98.183 0.000
d_agree_1 ~~ d_agree_1 0.019 -0.004 0.041 1.000 1.632 0.103
agree_t2 ~~ d_agree_1 -0.007 -0.022 0.008 -0.152 -0.954 0.340
agree_t2 ~ goals -0.105 -0.171 -0.039 -0.262 -3.118 0.002
d_agree_1 ~ goals -0.003 -0.051 0.045 -0.021 -0.128 0.898
goals ~~ goals 0.827 0.490 1.165 1.000 4.805 0.000

The moderation effect of specific, facet-level change goals with the agreeableness change score (current-self) is not significantly different from zero, b = -0.003, p = 0.898.

6.6.3.4 Agreeableness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 4780.544 4876.228 0.99 0.032 0.043
# parameters of interest
params_lcs_agree_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_agree_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t3 ~ agree_t2", "d_agree_1 =~ agree_t3", "agree_t2 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t2 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t2 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t3 ~ agree_t2 1.000 1.000 1.000 0.982 NA NA
d_agree_1 =~ agree_t3 1.000 1.000 1.000 0.360 NA NA
d_agree_1 ~1 -0.008 -0.044 0.027 -0.057 -0.454 0.650
agree_t2 ~1 3.473 3.403 3.542 8.888 97.530 0.000
d_agree_1 ~~ d_agree_1 0.019 -0.006 0.045 0.939 1.470 0.142
agree_t2 ~~ d_agree_1 -0.002 -0.021 0.016 -0.047 -0.253 0.801
agree_t2 ~ frequ 0.222 0.105 0.339 0.362 3.708 0.000
d_agree_1 ~ frequ -0.055 -0.115 0.005 -0.247 -1.806 0.071
frequ ~~ frequ 0.408 0.269 0.546 1.000 5.757 0.000

The moderation effect of the frequency of self-improvement behaviors with the agreeableness change score (current-self) is not significantly different from zero, b = -0.055, p = 0.071.

6.6.3.5 Conscientiousness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5580.107 5675.792 0.995 0.032 0.034
# parameters of interest
params_lcs_consc_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t3 ~ consc_t2", "d_consc_1 =~ consc_t3", "consc_t2 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t2 ~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t2 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t3 ~ consc_t2 1.000 1.000 1.000 1.043 NA NA
d_consc_1 =~ consc_t3 1.000 1.000 1.000 0.594 NA NA
d_consc_1 ~1 0.011 -0.052 0.074 0.025 0.341 0.733
consc_t2 ~1 3.507 3.412 3.602 4.615 72.539 0.000
d_consc_1 ~~ d_consc_1 0.184 0.081 0.286 0.980 3.522 0.000
consc_t2 ~~ d_consc_1 -0.088 -0.152 -0.025 -0.348 -2.719 0.007
consc_t2 ~ goals -0.406 -0.477 -0.334 -0.627 -11.135 0.000
d_consc_1 ~ goals 0.051 -0.004 0.107 0.140 1.816 0.069
goals ~~ goals 1.381 1.076 1.686 1.000 8.875 0.000

The moderation effect of specific, facet-level change goals with the conscientiousness change score (current-self) is not significantly different from zero, b = 0.051, p = 0.069.

6.6.3.6 Conscientiousness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5115.081 5210.766 0.99 0.045 0.036
# parameters of interest
params_lcs_consc_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_consc_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t3 ~ consc_t2", "d_consc_1 =~ consc_t3", "consc_t2 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t2 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t2 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t3 ~ consc_t2 1.000 1.000 1.000 1.039 NA NA
d_consc_1 =~ consc_t3 1.000 1.000 1.000 0.591 NA NA
d_consc_1 ~1 0.012 -0.051 0.075 0.027 0.365 0.715
consc_t2 ~1 3.507 3.413 3.602 4.624 72.538 0.000
d_consc_1 ~~ d_consc_1 0.186 0.088 0.284 0.999 3.711 0.000
consc_t2 ~~ d_consc_1 -0.113 -0.173 -0.054 -0.350 -3.725 0.000
consc_t2 ~ frequ 0.183 0.005 0.360 0.151 2.018 0.044
d_consc_1 ~ frequ -0.016 -0.130 0.097 -0.024 -0.283 0.777
frequ ~~ frequ 0.391 0.252 0.530 1.000 5.508 0.000

The moderation effect of the frequency of self-improvement behaviors with the conscientiousness change score (current-self) is not significantly different from zero, b = -0.016, p = 0.777.

6.6.3.7 Neuroticism: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5857.126 5952.81 0.99 0.045 0.028
# parameters of interest
params_lcs_neuro_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t3 ~ neuro_t2", "d_neuro_1 =~ neuro_t3", "neuro_t2 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t2 ~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t2 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t3 ~ neuro_t2 1.000 1.000 1.000 1.024 NA NA
d_neuro_1 =~ neuro_t3 1.000 1.000 1.000 0.476 NA NA
d_neuro_1 ~1 -0.049 -0.107 0.010 -0.134 -1.627 0.104
neuro_t2 ~1 3.095 2.998 3.193 3.946 62.201 0.000
d_neuro_1 ~~ d_neuro_1 0.130 0.079 0.180 0.976 5.030 0.000
neuro_t2 ~~ d_neuro_1 -0.052 -0.094 -0.011 -0.243 -2.461 0.014
neuro_t2 ~ goals 0.465 0.365 0.565 0.651 9.124 0.000
d_neuro_1 ~ goals -0.051 -0.112 0.010 -0.154 -1.646 0.100
goals ~~ goals 1.204 0.869 1.539 1.000 7.045 0.000

The moderation effect of specific, facet-level change goals with the neuroticism change score (current-self) is not significantly different from zero, b = -0.051, p = 0.1.

6.6.3.8 Neuroticism: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5257.822 5353.506 0.99 0.044 0.037
# parameters of interest
params_lcs_neuro_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_neuro_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t3 ~ neuro_t2", "d_neuro_1 =~ neuro_t3", "neuro_t2 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t2 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t2 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t3 ~ neuro_t2 1.000 1.000 1.000 1.024 NA NA
d_neuro_1 =~ neuro_t3 1.000 1.000 1.000 0.476 NA NA
d_neuro_1 ~1 -0.049 -0.108 0.010 -0.134 -1.616 0.106
neuro_t2 ~1 3.095 2.998 3.193 3.947 62.215 0.000
d_neuro_1 ~~ d_neuro_1 0.133 0.082 0.184 1.000 5.075 0.000
neuro_t2 ~~ d_neuro_1 -0.081 -0.127 -0.036 -0.285 -3.493 0.000
neuro_t2 ~ frequ -0.078 -0.256 0.099 -0.063 -0.866 0.386
d_neuro_1 ~ frequ -0.013 -0.121 0.096 -0.022 -0.230 0.818
frequ ~~ frequ 0.393 0.255 0.532 1.000 5.561 0.000

The moderation effect of the frequency of self-improvement behaviors with the neuroticism change score (current-self) is not significantly different from zero, b = -0.013, p = 0.818.

6.6.3.9 Openness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5307.825 5403.51 0.983 0.055 0.035
# parameters of interest
params_lcs_openn_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t3 ~ openn_t2", "d_openn_1 =~ openn_t3", "openn_t2 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t2 ~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t2 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t3 ~ openn_t2 1.000 1.000 1.000 1.007 NA NA
d_openn_1 =~ openn_t3 1.000 1.000 1.000 0.438 NA NA
d_openn_1 ~1 0.018 -0.027 0.063 0.072 0.795 0.427
openn_t2 ~1 3.586 3.505 3.667 6.190 87.225 0.000
d_openn_1 ~~ d_openn_1 0.061 0.032 0.090 0.962 4.170 0.000
openn_t2 ~~ d_openn_1 -0.025 -0.054 0.004 -0.185 -1.714 0.086
openn_t2 ~ goals -0.225 -0.331 -0.119 -0.307 -4.172 0.000
d_openn_1 ~ goals 0.062 -0.001 0.125 0.195 1.943 0.052
goals ~~ goals 0.625 0.396 0.853 1.000 5.358 0.000

The moderation effect of specific, facet-level change goals with the openness change score (current-self) is not significantly different from zero, b = 0.062, p = 0.052.

6.6.3.10 Openness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 4883.383 4979.068 0.991 0.037 0.038
# parameters of interest
params_lcs_openn_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_openn_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t3 ~ openn_t2", "d_openn_1 =~ openn_t3", "openn_t2 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t2 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t2 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t3 ~ openn_t2 1.000 1.000 1.000 1.006 NA NA
d_openn_1 =~ openn_t3 1.000 1.000 1.000 0.440 NA NA
d_openn_1 ~1 0.018 -0.026 0.062 0.072 0.797 0.426
openn_t2 ~1 3.586 3.505 3.666 6.270 87.269 0.000
d_openn_1 ~~ d_openn_1 0.062 0.034 0.090 0.991 4.333 0.000
openn_t2 ~~ d_openn_1 -0.029 -0.059 0.000 -0.216 -1.967 0.049
openn_t2 ~ frequ 0.263 0.112 0.413 0.287 3.422 0.001
d_openn_1 ~ frequ -0.037 -0.120 0.045 -0.093 -0.886 0.375
frequ ~~ frequ 0.389 0.250 0.528 1.000 5.487 0.000

The moderation effect of the frequency of self-improvement behaviors with the openness change score (current-self) is not significantly different from zero, b = -0.037, p = 0.375.

6.6.4 Big Five traits (ideal self)

6.6.4.1 Extraversion: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 6473.45 6572.849 0.994 0.02 0.033
# parameters of interest
params_lcs_extra_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.976 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.628 NA NA
d_extra_1 ~1 -0.019 -0.062 0.024 -0.080 -0.863 0.388
extra_t1 ~1 3.682 3.615 3.749 9.892 107.766 0.000
d_extra_1 ~~ d_extra_1 0.057 0.023 0.091 0.995 3.324 0.001
extra_t1 ~~ d_extra_1 -0.026 -0.052 0.000 -0.290 -1.948 0.051
extra_t1 ~ goals 0.050 -0.094 0.193 0.077 0.677 0.498
d_extra_1 ~ goals 0.029 -0.115 0.174 0.071 0.397 0.691
goals ~~ goals 0.332 0.012 0.652 1.000 2.037 0.042

The moderation effect of specific, facet-level change goals with the extraversion change score (ideal-self) is not significantly different from zero, b = 0.029, p = 0.691.

6.6.4.2 Extraversion: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5410.908 5510.307 0.994 0.022 0.036
# parameters of interest
params_lcs_extra_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_extra_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.975 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.628 NA NA
d_extra_1 ~1 -0.019 -0.061 0.024 -0.079 -0.854 0.393
extra_t1 ~1 3.682 3.615 3.749 10.096 107.889 0.000
d_extra_1 ~~ d_extra_1 0.055 0.022 0.087 0.989 3.272 0.001
extra_t1 ~~ d_extra_1 -0.027 -0.052 -0.001 -0.326 -2.035 0.042
extra_t1 ~ frequ 0.163 0.074 0.252 0.285 3.581 0.000
d_extra_1 ~ frequ 0.038 -0.042 0.117 0.103 0.934 0.351
frequ ~~ frequ 0.408 0.272 0.545 1.000 5.857 0.000

The moderation effect of the frequency of self-improvement behaviors with the extraversion change score (ideal-self) is not significantly different from zero, b = 0.038, p = 0.351.

6.6.4.3 Agreeableness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 6269.053 6368.452 0.978 0.047 0.048
# parameters of interest
params_lcs_agree_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.053 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.646 NA NA
d_agree_1 ~1 -0.030 -0.075 0.014 -0.111 -1.347 0.178
agree_t1 ~1 3.770 3.700 3.839 8.453 106.066 0.000
d_agree_1 ~~ d_agree_1 0.075 0.041 0.108 0.998 4.322 0.000
agree_t1 ~~ d_agree_1 -0.047 -0.071 -0.022 -0.385 -3.654 0.000
agree_t1 ~ goals -0.054 -0.126 0.017 -0.114 -1.487 0.137
d_agree_1 ~ goals 0.014 -0.048 0.076 0.048 0.444 0.657
goals ~~ goals 0.882 0.584 1.181 1.000 5.789 0.000

The moderation effect of specific, facet-level change goals with the agreeableness change score (ideal-self) is not significantly different from zero, b = 0.014, p = 0.657.

6.6.4.4 Agreeableness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5258.589 5357.988 0.97 0.056 0.052
# parameters of interest
params_lcs_agree_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_agree_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.055 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.647 NA NA
d_agree_1 ~1 -0.030 -0.074 0.013 -0.112 -1.355 0.175
agree_t1 ~1 3.769 3.700 3.839 8.618 106.252 0.000
d_agree_1 ~~ d_agree_1 0.071 0.039 0.104 0.993 4.285 0.000
agree_t1 ~~ d_agree_1 -0.043 -0.068 -0.018 -0.381 -3.386 0.001
agree_t1 ~ frequ 0.166 0.069 0.263 0.242 3.363 0.001
d_agree_1 ~ frequ -0.035 -0.122 0.052 -0.084 -0.794 0.427
frequ ~~ frequ 0.406 0.266 0.546 1.000 5.693 0.000

The moderation effect of the frequency of self-improvement behaviors with the agreeableness change score (ideal-self) is not significantly different from zero, b = -0.035, p = 0.427.

6.6.4.5 Conscientiousness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5871.279 5970.678 0.999 0.01 0.03
# parameters of interest
params_lcs_consc_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.936 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.623 NA NA
d_consc_1 ~1 0.009 -0.034 0.052 0.035 0.423 0.673
consc_t1 ~1 4.319 4.257 4.382 10.824 135.515 0.000
d_consc_1 ~~ d_consc_1 0.069 0.039 0.099 0.982 4.528 0.000
consc_t1 ~~ d_consc_1 -0.023 -0.050 0.004 -0.222 -1.699 0.089
consc_t1 ~ goals 0.019 -0.025 0.062 0.054 0.835 0.404
d_consc_1 ~ goals -0.031 -0.073 0.011 -0.136 -1.457 0.145
goals ~~ goals 1.336 1.025 1.646 1.000 8.433 0.000

The moderation effect of specific, facet-level change goals with the conscientiousness change score (ideal-self) is not significantly different from zero, b = -0.031, p = 0.145.

6.6.4.6 Conscientiousness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 4875.211 4974.61 0.982 0.044 0.053
# parameters of interest
params_lcs_consc_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_consc_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.937 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.619 NA NA
d_consc_1 ~1 0.010 -0.033 0.053 0.037 0.443 0.658
consc_t1 ~1 4.319 4.257 4.382 10.733 135.393 0.000
d_consc_1 ~~ d_consc_1 0.070 0.041 0.100 0.993 4.634 0.000
consc_t1 ~~ d_consc_1 -0.026 -0.054 0.002 -0.252 -1.833 0.067
consc_t1 ~ frequ 0.144 0.057 0.230 0.229 3.246 0.001
d_consc_1 ~ frequ 0.034 -0.034 0.102 0.082 0.988 0.323
frequ ~~ frequ 0.412 0.270 0.555 1.000 5.676 0.000

The frequency of self-improvement behaviors significantly moderates changes in conscientiousness (ideal-self), b = 0.034, p = 0.323.

6.6.4.7 Neuroticism: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 6034.885 6134.285 0.999 0.008 0.024
# parameters of interest
params_lcs_neuro_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.943 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.755 NA NA
d_neuro_1 ~1 0.042 -0.011 0.096 0.116 1.543 0.123
neuro_t1 ~1 1.707 1.648 1.766 3.748 56.783 0.000
d_neuro_1 ~~ d_neuro_1 0.130 0.078 0.183 0.980 4.875 0.000
neuro_t1 ~~ d_neuro_1 -0.050 -0.090 -0.010 -0.307 -2.455 0.014
neuro_t1 ~ goals -0.065 -0.122 -0.007 -0.157 -2.208 0.027
d_neuro_1 ~ goals 0.047 -0.014 0.107 0.142 1.516 0.129
goals ~~ goals 1.227 0.897 1.557 1.000 7.280 0.000

The moderation effect of specific, facet-level change goals with the neuroticism change score (ideal-self) is not significantly different from zero, b = 0.047, p = 0.129.

6.6.4.8 Neuroticism: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 4896.303 4995.702 0.983 0.042 0.055
# parameters of interest
params_lcs_neuro_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_neuro_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.942 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.754 NA NA
d_neuro_1 ~1 0.042 -0.012 0.095 0.114 1.528 0.127
neuro_t1 ~1 1.707 1.648 1.766 3.746 56.783 0.000
d_neuro_1 ~~ d_neuro_1 0.133 0.078 0.188 1.000 4.703 0.000
neuro_t1 ~~ d_neuro_1 -0.054 -0.099 -0.008 -0.328 -2.308 0.021
neuro_t1 ~ frequ -0.136 -0.248 -0.024 -0.192 -2.376 0.017
d_neuro_1 ~ frequ -0.005 -0.107 0.098 -0.008 -0.087 0.931
frequ ~~ frequ 0.414 0.268 0.561 1.000 5.543 0.000

The moderation effect of the frequency of self-improvement behaviors with the neuroticism change score (ideal-self) is not significantly different from zero, b = -0.005, p = 0.931.

6.6.4.9 Openness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 6172.404 6271.803 0.976 0.053 0.061
# parameters of interest
params_lcs_openn_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.026 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.516 NA NA
d_openn_1 ~1 0.016 -0.012 0.044 0.109 1.131 0.258
openn_t1 ~1 3.917 3.856 3.979 13.356 125.080 0.000
d_openn_1 ~~ d_openn_1 0.022 0.007 0.037 1.000 2.877 0.004
openn_t1 ~~ d_openn_1 -0.013 -0.027 0.000 -0.302 -1.905 0.057
openn_t1 ~ goals -0.011 -0.066 0.043 -0.031 -0.415 0.678
d_openn_1 ~ goals 0.000 -0.039 0.039 0.000 0.002 0.999
goals ~~ goals 0.629 0.417 0.842 1.000 5.801 0.000

The moderation effect of specific, facet-level change goals with the openness change score (ideal-self) is not significantly different from zero, b = 0, p = 0.999.

6.6.4.10 Openness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5335.677 5435.077 0.949 0.071 0.072
# parameters of interest
params_lcs_openn_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_openn_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.033 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.516 NA NA
d_openn_1 ~1 0.017 -0.012 0.045 0.110 1.128 0.259
openn_t1 ~1 3.917 3.856 3.979 13.070 124.999 0.000
d_openn_1 ~~ d_openn_1 0.022 0.007 0.038 0.998 2.832 0.005
openn_t1 ~~ d_openn_1 -0.014 -0.029 0.000 -0.320 -1.950 0.051
openn_t1 ~ frequ 0.056 -0.025 0.136 0.118 1.363 0.173
d_openn_1 ~ frequ 0.012 -0.040 0.064 0.049 0.441 0.659
frequ ~~ frequ 0.400 0.260 0.539 1.000 5.613 0.000

The moderation effect of the frequency of self-improvement behaviors with the openness change score (ideal-self) is not significantly different from zero, b = 0.012, p = 0.659.

6.6.5 Big Five facets (run models)

Run models for all facets with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific change goal

facet_template_mod_goal <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ ind_goal        # This estimates the moderation effect on personality at T1
d_facet_1 ~ ind_goal       # This estimates the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets -> change in current-self ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  mod_name = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), facet_model_fit))
}  

# loop across 15 facets -> change in ideal-self ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[6]], item_nrs) # ideal
  mod_name = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp6")), template_filled)) # ideal
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp6")), facet_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for current self ratings)

facet_template_mod_goal_fu <- '
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2
facet_t3 =~ 1*ind1_t3 + lamb2*ind2_t3 + lamb3*ind3_t3 + lamb4*ind4_t3 # This specifies the measurement model for facet at T3 (with equality constraints)

facet_t3 ~ 1*facet_t2     # This parameter regresses facet_t3 perfectly on facet_t2
d_facet_1 =~ 1*facet_t3   # This defines the latent change score factor as measured perfectly by scores on facet_t3
facet_t3 ~ 0*1            # This line constrains the intercept of facet_t3 to 0
facet_t3 ~~ 0*facet_t3    # This fixes the variance of facet_t3 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t2 ~ 1               # This estimates the intercept of facet_t2 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t2 ~~ facet_t2         # This estimates the variance of facet_t2 
facet_t2 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t2 ~ ind_goal        # This estimates the moderation effect on personality at T2
d_facet_1 ~ ind_goal       # This estimates the moderation effect on the change score

ind1_t2 ~~ ind1_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind2_t2 ~~ ind2_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind3_t2 ~~ ind3_t3   # This allows residual covariance on indicator X3 across T2 and T3
ind4_t2 ~~ ind4_t3   # This allows residual covariance on indicator X4 across T2 and T3

ind1_t2 ~~ res1*ind1_t2   # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2   # This allows residual variance on indicator X2 at T2
ind3_t2 ~~ res3*ind3_t2   # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2   # This allows residual variance on indicator X4 at T2

ind1_t3 ~~ res1*ind1_t3  # This allows residual variance on indicator X1 at T3 
ind2_t3 ~~ res2*ind2_t3  # This allows residual variance on indicator X2 at T3 
ind3_t3 ~~ res3*ind3_t3  # This allows residual variance on indicator X3 at T3
ind4_t3 ~~ res4*ind4_t3  # This allows residual variance on indicator X4 at T3

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind2_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind3_t3 ~ m3*1     # This estimates the intercept of X3 at T3
ind4_t3 ~ m4*1     # This estimates the intercept of X4 at T3

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets -> change in current-self ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  mod_name = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal_fu, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6_fu")), facet_model_fit))
}  

# 2nd, for frequency of self-improvement behavior

facet_template_mod_frequ <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_facet_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 15 facets -> change in current-self ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), facet_model_fit))
}  

# loop across 15 facets -> change in ideal-self ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[6]], item_nrs) # ideal
  template_filled <- str_replace_all(facet_template_mod_frequ, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp6")), template_filled)) # ideal
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp6")), facet_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for current self ratings)

facet_template_mod_frequ_fu <- '
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2
facet_t3 =~ 1*ind1_t3 + lamb2*ind2_t3 + lamb3*ind3_t3 + lamb4*ind4_t3 # This specifies the measurement model for facet at T3 (with equality constraints)

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

facet_t3 ~ 1*facet_t2     # This parameter regresses facet_t3 perfectly on facet_t2
d_facet_1 =~ 1*facet_t3   # This defines the latent change score factor as measured perfectly by scores on facet_t3
facet_t3 ~ 0*1            # This line constrains the intercept of facet_t3 to 0
facet_t3 ~~ 0*facet_t3    # This fixes the variance of facet_t3 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t2 ~ 1               # This estimates the intercept of facet_t2 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t2 ~~ facet_t2         # This estimates the variance of facet_t2 
facet_t2 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t2 ~ frequ           # This estimates the moderation effect on personality at T2
d_facet_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t2 ~~ ind1_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind2_t2 ~~ ind2_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind3_t2 ~~ ind3_t3   # This allows residual covariance on indicator X3 across T2 and T3
ind4_t2 ~~ ind4_t3   # This allows residual covariance on indicator X4 across T2 and T3

ind1_t2 ~~ res1*ind1_t2   # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2   # This allows residual variance on indicator X2 at T2
ind3_t2 ~~ res3*ind3_t2   # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2   # This allows residual variance on indicator X4 at T2

ind1_t3 ~~ res1*ind1_t3  # This allows residual variance on indicator X1 at T3 
ind2_t3 ~~ res2*ind2_t3  # This allows residual variance on indicator X2 at T3 
ind3_t3 ~~ res3*ind3_t3  # This allows residual variance on indicator X3 at T3
ind4_t3 ~~ res4*ind4_t3  # This allows residual variance on indicator X4 at T3

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind2_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind3_t3 ~ m3*1     # This estimates the intercept of X3 at T3
ind4_t3 ~ m4*1     # This estimates the intercept of X4 at T3

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 15 facets -> change in current-self ratings from T2 to T3
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ_fu, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6_fu")), facet_model_fit))
}  

6.6.6 Big Five facets (current self)

6.6.6.1 Sociability - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8035.567 8123.497 0.937 0.088 0.052
# parameters of interest
params_lcs_socia_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", "d_socia_1 ~ sb07_01_t1", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.078 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.504 NA NA
d_socia_1 ~1 -0.021 -0.237 0.194 -0.055 -0.195 0.845
socia_t1 ~1 3.987 3.643 4.331 4.748 22.721 0.000
d_socia_1 ~~ d_socia_1 0.153 0.077 0.228 0.991 3.965 0.000
socia_t1 ~~ d_socia_1 -0.111 -0.173 -0.049 -0.386 -3.502 0.000
d_socia_1 ~ sb07_01_t1 0.030 -0.028 0.087 0.095 1.002 0.316
sb07_01_t1 ~~ sb07_01_t1 1.596 1.400 1.793 1.000 15.904 0.000

The moderation effect of the facet-specific change goal with the sociability change score (current-self) is not significantly different from zero, b = 0.03, p = 0.316.

6.6.6.2 Sociability - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9260.587 9375.278 0.938 0.075 0.066
# parameters of interest
params_lcs_socia_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_socia_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.082 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.505 NA NA
d_socia_1 ~1 0.073 0.001 0.145 0.193 1.996 0.046
socia_t1 ~1 2.875 2.747 3.003 3.530 44.063 0.000
d_socia_1 ~~ d_socia_1 0.126 0.058 0.194 0.871 3.642 0.000
socia_t1 ~~ d_socia_1 -0.108 -0.174 -0.041 -0.376 -3.182 0.001
socia_t1 ~ frequ -0.147 -0.336 0.042 -0.114 -1.520 0.128
d_socia_1 ~ frequ 0.215 0.101 0.329 0.359 3.694 0.000
frequ ~~ frequ 0.403 0.264 0.542 1.000 5.689 0.000

The frequency of self-improvement behaviors significantly moderates changes in sociability (current-self) from T1 to T2, b = 0.215, p = 0.

6.6.6.3 Assertiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8326.72 8414.65 0.94 0.076 0.056
# parameters of interest
params_lcs_asser_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", "d_asser_1 ~ sb07_02_t1", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.036 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.482 NA NA
d_asser_1 ~1 0.112 -0.008 0.233 0.405 1.824 0.068
asser_t1 ~1 3.480 3.226 3.735 5.824 26.773 0.000
d_asser_1 ~~ d_asser_1 0.077 0.013 0.141 0.996 2.341 0.019
asser_t1 ~~ d_asser_1 -0.053 -0.099 -0.007 -0.333 -2.278 0.023
d_asser_1 ~ sb07_02_t1 -0.014 -0.052 0.024 -0.066 -0.736 0.462
sb07_02_t1 ~~ sb07_02_t1 1.688 1.495 1.880 1.000 17.186 0.000

The moderation effect of the facet-specific change goal with the assertiveness change score (current-self) is not significantly different from zero, b = -0.014, p = 0.462.

6.6.6.4 Assertiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9480.491 9595.182 0.981 0.038 0.041
# parameters of interest
params_lcs_asser_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_asser_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.026 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.486 NA NA
d_asser_1 ~1 0.058 0.009 0.106 0.214 2.344 0.019
asser_t1 ~1 3.094 2.974 3.215 5.455 50.439 0.000
d_asser_1 ~~ d_asser_1 0.072 0.014 0.130 0.994 2.414 0.016
asser_t1 ~~ d_asser_1 -0.047 -0.088 -0.005 -0.314 -2.214 0.027
asser_t1 ~ frequ 0.195 0.048 0.342 0.215 2.597 0.009
d_asser_1 ~ frequ 0.033 -0.052 0.119 0.077 0.757 0.449
frequ ~~ frequ 0.391 0.255 0.528 1.000 5.624 0.000

The moderation effect of the frequency of self-improvement behaviors with the assertiveness change score (current-self) is not significantly different from zero, b = 0.033, p = 0.449.

6.6.6.5 Energy - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8428.622 8516.552 0.978 0.042 0.039
# parameters of interest
params_lcs_energ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", "d_energ_1 ~ sb07_03_t1", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.075 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.481 NA NA
d_energ_1 ~1 0.095 0.019 0.172 0.629 2.440 0.015
energ_t1 ~1 2.309 2.079 2.539 6.830 19.653 0.000
d_energ_1 ~~ d_energ_1 0.020 -0.002 0.042 0.879 1.798 0.072
energ_t1 ~~ d_energ_1 -0.011 -0.024 0.003 -0.254 -1.545 0.122
d_energ_1 ~ sb07_03_t1 -0.042 -0.069 -0.015 -0.348 -3.074 0.002
sb07_03_t1 ~~ sb07_03_t1 1.571 1.373 1.769 1.000 15.560 0.000

The moderation effect of the facet-specific change goal with the energy change score (current-self) is not significantly different from zero, b = -0.042, p = 0.002.

6.6.6.6 Energy - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9657.041 9771.733 0.968 0.045 0.051
# parameters of interest
params_lcs_energ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_energ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.077 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.487 NA NA
d_energ_1 ~1 -0.058 -0.099 -0.017 -0.370 -2.798 0.005
energ_t1 ~1 2.771 2.663 2.880 7.954 50.194 0.000
d_energ_1 ~~ d_energ_1 0.023 -0.002 0.048 0.929 1.816 0.069
energ_t1 ~~ d_energ_1 -0.023 -0.044 -0.001 -0.430 -2.089 0.037
energ_t1 ~ frequ -0.068 -0.168 0.032 -0.121 -1.332 0.183
d_energ_1 ~ frequ -0.068 -0.132 -0.004 -0.267 -2.074 0.038
frequ ~~ frequ 0.383 0.244 0.522 1.000 5.407 0.000

The moderation effect of the frequency of self-improvement behaviors with the energy change score (current-self) is not significantly different from zero (at p < . 001), b = -0.068, p = 0.038.

6.6.6.7 Compassion - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8251.835 8339.765 0.969 0.043 0.044
# parameters of interest
params_lcs_compa_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", "d_compa_1 ~ sb07_04_t1", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.132 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.462 NA NA
d_compa_1 ~1 -0.022 -0.142 0.098 -0.088 -0.358 0.721
compa_t1 ~1 4.594 4.429 4.760 7.562 54.393 0.000
d_compa_1 ~~ d_compa_1 0.057 0.004 0.111 0.933 2.117 0.034
compa_t1 ~~ d_compa_1 -0.058 -0.102 -0.014 -0.422 -2.561 0.010
d_compa_1 ~ sb07_04_t1 0.047 0.000 0.095 0.259 1.957 0.050
sb07_04_t1 ~~ sb07_04_t1 1.843 1.662 2.024 1.000 19.989 0.000

The moderation effect of the facet-specific change goal with the compassion change score (current-self) is not significantly different from zero, b = 0.047, p = 0.05.

6.6.6.8 Compassion - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9379.957 9494.648 0.932 0.062 0.07
# parameters of interest
params_lcs_compa_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_compa_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.133 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.464 NA NA
d_compa_1 ~1 0.103 0.040 0.165 0.409 3.237 0.001
compa_t1 ~1 4.183 4.090 4.276 6.834 88.071 0.000
d_compa_1 ~~ d_compa_1 0.063 0.007 0.119 0.998 2.207 0.027
compa_t1 ~~ d_compa_1 -0.075 -0.125 -0.024 -0.507 -2.897 0.004
compa_t1 ~ frequ 0.269 0.084 0.453 0.278 2.855 0.004
d_compa_1 ~ frequ 0.017 -0.110 0.143 0.042 0.258 0.796
frequ ~~ frequ 0.400 0.259 0.542 1.000 5.544 0.000

The frequency of self-improvement behaviors significantly moderates changes in compassion (current-self), b = 0.017, p = 0.796.

6.6.6.9 Respectfulness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7156.733 7244.663 0.951 0.064 0.062
# parameters of interest
params_lcs_respe_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", "d_respe_1 ~ sb07_05_t1", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.166 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.637 NA NA
d_respe_1 ~1 -0.049 -0.157 0.058 -0.158 -0.902 0.367
respe_t1 ~1 4.849 4.719 4.979 8.483 73.056 0.000
d_respe_1 ~~ d_respe_1 0.096 0.032 0.159 0.982 2.950 0.003
respe_t1 ~~ d_respe_1 -0.083 -0.141 -0.024 -0.508 -2.774 0.006
d_respe_1 ~ sb07_05_t1 0.031 -0.017 0.078 0.133 1.261 0.207
sb07_05_t1 ~~ sb07_05_t1 1.826 1.606 2.045 1.000 16.293 0.000

The moderation effect of the facet-specific change goal with the respectfulness change score (current-self) is not significantly different from zero, b = 0.031, p = 0.207.

6.6.6.10 Respectfulness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 8302.649 8417.341 0.954 0.056 0.06
# parameters of interest
params_lcs_respe_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respe_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.167 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.639 NA NA
d_respe_1 ~1 0.018 -0.039 0.074 0.057 0.613 0.540
respe_t1 ~1 4.474 4.395 4.552 7.847 111.809 0.000
d_respe_1 ~~ d_respe_1 0.093 0.030 0.157 0.956 2.888 0.004
respe_t1 ~~ d_respe_1 -0.080 -0.142 -0.018 -0.485 -2.519 0.012
respe_t1 ~ frequ 0.286 0.142 0.431 0.316 3.880 0.000
d_respe_1 ~ frequ -0.104 -0.204 -0.005 -0.211 -2.067 0.039
frequ ~~ frequ 0.396 0.261 0.531 1.000 5.753 0.000

The moderation effect of the frequency of self-improvement behaviors with the respectfulness change score (current-self) is not significantly different from zero, b = -0.104, p = 0.039.

6.6.6.11 Trust - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8531.227 8619.157 0.95 0.059 0.056
# parameters of interest
params_lcs_trust_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", "d_trust_1 ~ sb07_06_t1", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.073 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.514 NA NA
d_trust_1 ~1 0.029 -0.118 0.175 0.091 0.384 0.701
trust_t1 ~1 2.586 2.344 2.828 3.946 20.933 0.000
d_trust_1 ~~ d_trust_1 0.094 0.016 0.172 0.958 2.372 0.018
trust_t1 ~~ d_trust_1 -0.069 -0.131 -0.008 -0.352 -2.201 0.028
d_trust_1 ~ sb07_06_t1 -0.048 -0.104 0.009 -0.205 -1.648 0.099
sb07_06_t1 ~~ sb07_06_t1 1.828 1.657 2.000 1.000 20.862 0.000

The moderation effect of the facet-specific change goal with the trust change score (current-self) is not significantly different from zero, b = -0.048, p = 0.099.

6.6.6.12 Trust - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9655.017 9769.708 0.966 0.045 0.058
# parameters of interest
params_lcs_trust_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_trust_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.077 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.503 NA NA
d_trust_1 ~1 -0.091 -0.168 -0.014 -0.313 -2.326 0.020
trust_t1 ~1 2.834 2.710 2.958 4.540 44.770 0.000
d_trust_1 ~~ d_trust_1 0.085 0.005 0.166 1.000 2.073 0.038
trust_t1 ~~ d_trust_1 -0.069 -0.136 -0.002 -0.384 -2.032 0.042
trust_t1 ~ frequ -0.126 -0.303 0.052 -0.127 -1.387 0.165
d_trust_1 ~ frequ 0.001 -0.113 0.115 0.002 0.013 0.990
frequ ~~ frequ 0.395 0.258 0.531 1.000 5.656 0.000

The moderation effect of the self-improvement behaviors with the trust change score (current-self) is not significantly different from zero, b = 0.001, p = 0.99.

6.6.6.13 Organization - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7983.001 8070.931 0.957 0.076 0.043
# parameters of interest
params_lcs_organ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", "d_organ_1 ~ sb07_07_t1", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.016 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.446 NA NA
d_organ_1 ~1 0.084 -0.098 0.266 0.171 0.902 0.367
organ_t1 ~1 1.266 0.956 1.577 1.133 7.992 0.000
d_organ_1 ~~ d_organ_1 0.234 0.087 0.381 0.971 3.126 0.002
organ_t1 ~~ d_organ_1 -0.078 -0.173 0.016 -0.192 -1.622 0.105
d_organ_1 ~ sb07_07_t1 -0.056 -0.112 0.000 -0.170 -1.971 0.049
sb07_07_t1 ~~ sb07_07_t1 2.197 2.005 2.390 1.000 22.378 0.000

The moderation effect of the facet-specific change goal with the organization change score (current-self) is not significantly different from zero, b = -0.056, p = 0.049.

6.6.6.14 Organization - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9180.5 9295.191 0.977 0.047 0.04
# parameters of interest
params_lcs_organ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_organ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.014 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.454 NA NA
d_organ_1 ~1 -0.088 -0.170 -0.006 -0.192 -2.093 0.036
organ_t1 ~1 2.856 2.708 3.003 2.786 37.969 0.000
d_organ_1 ~~ d_organ_1 0.210 0.081 0.339 0.998 3.193 0.001
organ_t1 ~~ d_organ_1 -0.122 -0.217 -0.027 -0.262 -2.513 0.012
organ_t1 ~ frequ -0.214 -0.455 0.027 -0.131 -1.742 0.082
d_organ_1 ~ frequ -0.029 -0.177 0.119 -0.039 -0.378 0.706
frequ ~~ frequ 0.395 0.257 0.534 1.000 5.590 0.000

The moderation effect of the frequency of self-improvement behaviors with the organization change score (current-self) is not significantly different from zero, b = -0.029, p = 0.706.

6.6.6.15 Productiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7978.471 8066.401 0.953 0.075 0.055
# parameters of interest
params_lcs_produ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", "d_produ_1 ~ sb07_08_t1", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.019 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.651 NA NA
d_produ_1 ~1 0.042 -0.224 0.309 0.070 0.311 0.756
produ_t1 ~1 1.763 1.422 2.105 1.857 10.120 0.000
d_produ_1 ~~ d_produ_1 0.362 0.183 0.542 0.984 3.962 0.000
produ_t1 ~~ d_produ_1 -0.154 -0.241 -0.067 -0.350 -3.479 0.001
d_produ_1 ~ sb07_08_t1 -0.056 -0.123 0.012 -0.126 -1.615 0.106
sb07_08_t1 ~~ sb07_08_t1 1.898 1.650 2.147 1.000 14.989 0.000

The moderation effect of the facet-specific change goal with the productiveness change score (current-self) is not significantly different from zero, b = -0.056, p = 0.106.

6.6.6.16 Productiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9215.556 9330.247 0.956 0.062 0.053
# parameters of interest
params_lcs_produ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_produ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.022 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.657 NA NA
d_produ_1 ~1 -0.162 -0.253 -0.072 -0.271 -3.523 0.000
produ_t1 ~1 3.417 3.283 3.550 3.664 50.196 0.000
d_produ_1 ~~ d_produ_1 0.354 0.172 0.536 0.985 3.822 0.000
produ_t1 ~~ d_produ_1 -0.206 -0.308 -0.104 -0.373 -3.966 0.000
produ_t1 ~ frequ -0.166 -0.396 0.065 -0.111 -1.406 0.160
d_produ_1 ~ frequ -0.119 -0.292 0.054 -0.124 -1.349 0.177
frequ ~~ frequ 0.391 0.252 0.531 1.000 5.493 0.000

The frequency of self-improvement behaviors significantly moderates changes in productiveness (current-self), b = -0.119, p = 0.177.

6.6.6.17 Responsibility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8278.143 8366.073 0.922 0.082 0.077
# parameters of interest
params_lcs_respo_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", "d_respo_1 ~ sb07_09_t1", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.043 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.550 NA NA
d_respo_1 ~1 -0.006 -0.108 0.095 -0.025 -0.123 0.902
respo_t1 ~1 4.055 3.858 4.253 8.412 40.172 0.000
d_respo_1 ~~ d_respo_1 0.064 0.013 0.114 0.985 2.450 0.014
respo_t1 ~~ d_respo_1 -0.035 -0.068 -0.002 -0.323 -2.084 0.037
d_respo_1 ~ sb07_09_t1 0.021 -0.013 0.054 0.120 1.220 0.222
sb07_09_t1 ~~ sb07_09_t1 2.197 2.012 2.381 1.000 23.307 0.000

The moderation effect of the facet-specific change goal with the responsibility change score (current-self) is not significantly different from zero, b = 0.021, p = 0.222.

6.6.6.18 Responsibility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9394.541 9509.232 0.921 0.074 0.08
# parameters of interest
params_lcs_respo_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respo_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.043 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.551 NA NA
d_respo_1 ~1 0.057 0.005 0.110 0.221 2.158 0.031
respo_t1 ~1 3.598 3.493 3.703 7.308 67.244 0.000
d_respo_1 ~~ d_respo_1 0.068 0.012 0.123 1.000 2.379 0.017
respo_t1 ~~ d_respo_1 -0.044 -0.083 -0.004 -0.342 -2.161 0.031
respo_t1 ~ frequ 0.052 -0.080 0.184 0.066 0.771 0.441
d_respo_1 ~ frequ 0.001 -0.095 0.097 0.002 0.014 0.989
frequ ~~ frequ 0.394 0.255 0.532 1.000 5.570 0.000

The moderation effect of the frequency of self-improvement behaviors with the responsibility change score (current-self) is not significantly different from zero, b = 0.001, p = 0.989.

6.6.6.19 Anxiety - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8282.415 8370.345 0.993 0.026 0.037
# parameters of interest
params_lcs_anxie_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", "d_anxie_1 ~ sb07_10_t1", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.026 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.473 NA NA
d_anxie_1 ~1 -0.158 -0.376 0.061 -0.369 -1.414 0.157
anxie_t1 ~1 4.233 3.930 4.535 4.572 27.434 0.000
d_anxie_1 ~~ d_anxie_1 0.159 0.060 0.258 0.872 3.159 0.002
anxie_t1 ~~ d_anxie_1 -0.019 -0.094 0.056 -0.069 -0.497 0.619
d_anxie_1 ~ sb07_10_t1 0.101 0.044 0.159 0.358 3.448 0.001
sb07_10_t1 ~~ sb07_10_t1 2.277 2.041 2.512 1.000 18.979 0.000

The moderation effect of the facet-specific change goal with the anxiety change score (current-self) is not significantly different from zero (at p < .001), b = 0.101, p = 0.001.

6.6.6.20 Anxiety - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9463.499 9578.19 0.977 0.04 0.046
# parameters of interest
params_lcs_anxie_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_anxie_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.029 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.472 NA NA
d_anxie_1 ~1 0.217 0.128 0.306 0.502 4.795 0.000
anxie_t1 ~1 2.748 2.613 2.883 2.913 39.911 0.000
d_anxie_1 ~~ d_anxie_1 0.185 0.074 0.296 0.992 3.273 0.001
anxie_t1 ~~ d_anxie_1 -0.118 -0.223 -0.012 -0.290 -2.185 0.029
anxie_t1 ~ frequ -0.028 -0.266 0.209 -0.019 -0.234 0.815
d_anxie_1 ~ frequ 0.063 -0.104 0.230 0.092 0.736 0.462
frequ ~~ frequ 0.398 0.258 0.539 1.000 5.553 0.000

The moderation effect of the frequency of self-improvement behaviors with the anxiety change score (current-self) is not significantly different from zero, b = 0.063, p = 0.462.

6.6.6.21 Depression - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8187.961 8275.891 0.956 0.079 0.055
# parameters of interest
params_lcs_depre_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", "d_depre_1 ~ sb07_11_t1", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.055 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.583 NA NA
d_depre_1 ~1 -0.011 -0.110 0.088 -0.030 -0.213 0.831
depre_t1 ~1 4.028 3.839 4.217 6.168 41.841 0.000
d_depre_1 ~~ d_depre_1 0.127 0.065 0.189 0.972 4.005 0.000
depre_t1 ~~ d_depre_1 -0.058 -0.100 -0.015 -0.369 -2.639 0.008
d_depre_1 ~ sb07_11_t1 0.037 0.006 0.069 0.166 2.306 0.021
sb07_11_t1 ~~ sb07_11_t1 2.607 2.417 2.797 1.000 26.876 0.000

The moderation effect of the facet-specific change goal with the depression change score (current-self) is not significantly different from zero, b = 0.037, p = 0.021.

6.6.6.22 Depression - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9417.201 9531.892 0.928 0.084 0.079
# parameters of interest
params_lcs_depre_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_depre_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.057 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.588 NA NA
d_depre_1 ~1 0.117 0.056 0.179 0.316 3.723 0.000
depre_t1 ~1 3.037 2.916 3.158 4.539 49.287 0.000
d_depre_1 ~~ d_depre_1 0.138 0.069 0.207 0.996 3.942 0.000
depre_t1 ~~ d_depre_1 -0.092 -0.146 -0.038 -0.372 -3.353 0.001
depre_t1 ~ frequ -0.015 -0.177 0.147 -0.014 -0.181 0.857
d_depre_1 ~ frequ 0.037 -0.065 0.138 0.062 0.707 0.479
frequ ~~ frequ 0.395 0.254 0.536 1.000 5.497 0.000

The moderation effect of the frequency of self-improvement behaviors with the depression change score (current-self) is not significantly different from zero, b = 0.037, p = 0.479.

6.6.6.23 Volatility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8350.284 8438.215 0.989 0.036 0.032
# parameters of interest
params_lcs_volat_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", "d_volat_1 ~ sb07_12_t1", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.159 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.666 NA NA
d_volat_1 ~1 -0.104 -0.285 0.077 -0.183 -1.131 0.258
volat_t1 ~1 2.471 2.224 2.718 2.485 19.599 0.000
d_volat_1 ~~ d_volat_1 0.325 0.197 0.454 0.995 4.971 0.000
volat_t1 ~~ d_volat_1 -0.276 -0.382 -0.170 -0.519 -5.092 0.000
d_volat_1 ~ sb07_12_t1 -0.027 -0.092 0.037 -0.069 -0.829 0.407
sb07_12_t1 ~~ sb07_12_t1 2.103 1.911 2.296 1.000 21.428 0.000

The moderation effect of the facet-specific change goal with the volatility change score (current-self) is not significantly different from zero, b = -0.027, p = 0.407.

6.6.6.24 Volatility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9461.255 9575.946 1 0 0.028
# parameters of interest
params_lcs_volat_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_volat_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.158 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.664 NA NA
d_volat_1 ~1 -0.177 -0.265 -0.089 -0.313 -3.936 0.000
volat_t1 ~1 3.117 2.978 3.256 3.161 43.892 0.000
d_volat_1 ~~ d_volat_1 0.320 0.194 0.446 0.998 4.965 0.000
volat_t1 ~~ d_volat_1 -0.283 -0.387 -0.178 -0.507 -5.287 0.000
volat_t1 ~ frequ -0.055 -0.285 0.175 -0.035 -0.466 0.641
d_volat_1 ~ frequ 0.044 -0.134 0.222 0.049 0.481 0.631
frequ ~~ frequ 0.396 0.259 0.533 1.000 5.651 0.000

The moderation effect of the frequency of self-improvement behaviors with the volatility change score (current-self) is significantly different from zero, b = 0.044, p = 0.631.

6.6.6.25 Curiosity - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8110.242 8198.172 0.994 0.02 0.037
# parameters of interest
params_lcs_curio_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", "d_curio_1 ~ sb07_13_t1", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.992 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.434 NA NA
d_curio_1 ~1 -0.065 -0.157 0.028 -0.334 -1.369 0.171
curio_t1 ~1 4.460 4.315 4.605 10.107 60.268 0.000
d_curio_1 ~~ d_curio_1 0.034 -0.003 0.071 0.913 1.791 0.073
curio_t1 ~~ d_curio_1 -0.008 -0.037 0.021 -0.107 -0.548 0.584
d_curio_1 ~ sb07_13_t1 0.044 0.006 0.081 0.296 2.264 0.024
sb07_13_t1 ~~ sb07_13_t1 1.720 1.528 1.912 1.000 17.525 0.000

The moderation effect of the facet-specific change goal with the curiosity change score (current-self) is not significantly different from zero, b = 0.044, p = 0.024.

6.6.6.26 Curiosity - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9264.735 9379.427 0.981 0.033 0.051
# parameters of interest
params_lcs_curio_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_curio_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.993 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.429 NA NA
d_curio_1 ~1 0.037 -0.011 0.086 0.196 1.518 0.129
curio_t1 ~1 4.182 4.095 4.269 9.451 93.719 0.000
d_curio_1 ~~ d_curio_1 0.031 -0.005 0.068 0.861 1.709 0.088
curio_t1 ~~ d_curio_1 -0.020 -0.051 0.011 -0.258 -1.280 0.201
curio_t1 ~ frequ 0.071 -0.057 0.199 0.101 1.091 0.275
d_curio_1 ~ frequ 0.114 0.026 0.201 0.373 2.531 0.011
frequ ~~ frequ 0.394 0.255 0.533 1.000 5.559 0.000

The moderation effect of the frequency of self-improvement behaviors with the curiosity change score (current-self) is not significantly different from zero (at p < .001), b = 0.114, p = 0.011.

6.6.6.27 Aesthetic - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8395.355 8483.285 0.999 0.01 0.035
# parameters of interest
params_lcs_aesth_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", "d_aesth_1 ~ sb07_14_t1", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.001 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.488 NA NA
d_aesth_1 ~1 -0.011 -0.048 0.025 -0.112 -0.593 0.553
aesth_t1 ~1 2.929 2.795 3.062 14.460 42.966 0.000
d_aesth_1 ~~ d_aesth_1 0.010 -0.006 0.025 1.000 1.223 0.221
aesth_t1 ~~ d_aesth_1 -0.005 -0.014 0.004 -0.245 -1.053 0.293
d_aesth_1 ~ sb07_14_t1 0.001 -0.012 0.014 0.019 0.205 0.838
sb07_14_t1 ~~ sb07_14_t1 1.960 1.782 2.138 1.000 21.634 0.000

The moderation effect of the facet-specific change goal with the aesthetic change score (current-self) is not significantly different from zero, b = 0.001, p = 0.838.

6.6.6.28 Aesthetic - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9481.735 9596.426 0.99 0.028 0.047
# parameters of interest
params_lcs_aesth_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_aesth_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.000 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.488 NA NA
d_aesth_1 ~1 -0.007 -0.026 0.011 -0.075 -0.776 0.438
aesth_t1 ~1 2.934 2.810 3.058 14.304 46.393 0.000
d_aesth_1 ~~ d_aesth_1 0.010 -0.006 0.026 0.997 1.236 0.217
aesth_t1 ~~ d_aesth_1 -0.005 -0.014 0.004 -0.238 -1.038 0.299
aesth_t1 ~ frequ -0.071 -0.147 0.006 -0.216 -1.806 0.071
d_aesth_1 ~ frequ 0.008 -0.025 0.042 0.053 0.490 0.624
frequ ~~ frequ 0.394 0.253 0.535 1.000 5.463 0.000

The moderation effect of the frequency of self-improvement behaviors with the aesthetic change score (current-self) is not significantly different from zero, b = 0.008, p = 0.624.

6.6.6.29 Imagination - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7978.148 8066.078 0.951 0.065 0.053
# parameters of interest
params_lcs_imagi_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", "d_imagi_1 ~ sb07_15_t1", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.020 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.481 NA NA
d_imagi_1 ~1 0.089 -0.053 0.230 0.262 1.230 0.219
imagi_t1 ~1 4.176 3.985 4.367 5.815 42.897 0.000
d_imagi_1 ~~ d_imagi_1 0.114 0.042 0.187 0.999 3.106 0.002
imagi_t1 ~~ d_imagi_1 -0.065 -0.126 -0.003 -0.284 -2.054 0.040
d_imagi_1 ~ sb07_15_t1 0.007 -0.038 0.053 0.031 0.322 0.748
sb07_15_t1 ~~ sb07_15_t1 2.017 1.837 2.198 1.000 21.908 0.000

The moderation effect of the facet-specific change goal with the imagination change score (current-self) is not significantly different from zero, b = 0.007, p = 0.748.

6.6.6.30 Imagination - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9083.231 9197.922 0.962 0.052 0.052
# parameters of interest
params_lcs_imagi_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_imagi_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.023 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.488 NA NA
d_imagi_1 ~1 0.110 0.044 0.177 0.317 3.243 0.001
imagi_t1 ~1 3.644 3.544 3.744 4.989 71.301 0.000
d_imagi_1 ~~ d_imagi_1 0.119 0.045 0.194 0.984 3.143 0.002
imagi_t1 ~~ d_imagi_1 -0.080 -0.146 -0.014 -0.327 -2.385 0.017
imagi_t1 ~ frequ 0.277 0.085 0.469 0.237 2.821 0.005
d_imagi_1 ~ frequ 0.070 -0.054 0.195 0.126 1.107 0.268
frequ ~~ frequ 0.389 0.256 0.523 1.000 5.707 0.000

The moderation effect of the frequency of self-improvement behaviors with the imagination change score (current-self) is not significantly different from zero, b = 0.07, p = 0.268.

6.6.7 Big Five facets (current self - follow-up T3)

6.6.7.1 Sociability - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6930.966 7015.61 0.965 0.066 0.049
# parameters of interest
params_lcs_socia_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t3 ~ socia_t2", "d_socia_1 =~ socia_t3", "socia_t2 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", "d_socia_1 ~ sb07_01_t1", # change goals
                     "d_socia_1 ~1 ", "socia_t2 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t3 ~ socia_t2 1.000 1.000 1.000 0.974 NA NA
d_socia_1 =~ socia_t3 1.000 1.000 1.000 0.475 NA NA
d_socia_1 ~1 -0.022 -0.247 0.204 -0.060 -0.188 0.851
socia_t2 ~1 4.005 3.678 4.332 5.415 24.014 0.000
d_socia_1 ~~ d_socia_1 0.129 0.059 0.200 0.995 3.602 0.000
socia_t2 ~~ d_socia_1 -0.042 -0.095 0.011 -0.176 -1.537 0.124
d_socia_1 ~ sb07_01_t1 0.020 -0.040 0.080 0.069 0.645 0.519
sb07_01_t1 ~~ sb07_01_t1 1.587 1.374 1.800 1.000 14.599 0.000

The moderation effect of the facet-specific change goal with the sociability change score (current-self) from T2 to T3 is not significantly different from zero, b = 0.02, p = 0.519.

6.6.7.2 Sociability - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8296.975 8407.38 0.954 0.067 0.069
# parameters of interest
params_lcs_socia_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_socia_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t3 ~ socia_t2", "d_socia_1 =~ socia_t3", "socia_t2 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t2 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t2 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t3 ~ socia_t2 1.000 1.000 1.000 0.973 NA NA
d_socia_1 =~ socia_t3 1.000 1.000 1.000 0.475 NA NA
d_socia_1 ~1 0.047 -0.017 0.111 0.133 1.438 0.150
socia_t2 ~1 3.059 2.925 3.193 4.242 44.839 0.000
d_socia_1 ~~ d_socia_1 0.124 0.054 0.193 0.998 3.460 0.001
socia_t2 ~~ d_socia_1 -0.047 -0.103 0.009 -0.186 -1.640 0.101
socia_t2 ~ frequ 0.028 -0.154 0.211 0.025 0.303 0.762
d_socia_1 ~ frequ -0.023 -0.138 0.092 -0.042 -0.396 0.692
frequ ~~ frequ 0.397 0.256 0.538 1.000 5.524 0.000

The moderation effect of the frequency of self-improvement behaviors with the sociability change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.023, p = 0.692.

6.6.7.3 Assertiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7262.607 7347.251 0.962 0.059 0.05
# parameters of interest
params_lcs_asser_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t3 ~ asser_t2", "d_asser_1 =~ asser_t3", "asser_t2 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", "d_asser_1 ~ sb07_02_t1", # change goals
                     "d_asser_1 ~1 ", "asser_t2 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t3 ~ asser_t2 1.000 1.000 1.000 1.001 NA NA
d_asser_1 =~ asser_t3 1.000 1.000 1.000 0.494 NA NA
d_asser_1 ~1 -0.071 -0.201 0.060 -0.260 -1.064 0.287
asser_t2 ~1 3.505 3.225 3.784 6.371 24.599 0.000
d_asser_1 ~~ d_asser_1 0.073 0.006 0.139 0.983 2.138 0.033
asser_t2 ~~ d_asser_1 -0.033 -0.070 0.004 -0.226 -1.728 0.084
d_asser_1 ~ sb07_02_t1 0.027 -0.013 0.067 0.129 1.308 0.191
sb07_02_t1 ~~ sb07_02_t1 1.689 1.486 1.891 1.000 16.348 0.000

The moderation effect of the facet-specific change goal with the assertiveness change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.027, p = 0.191.

6.6.7.4 Assertiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8549.876 8660.281 0.992 0.026 0.043
# parameters of interest
params_lcs_asser_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_asser_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t3 ~ asser_t2", "d_asser_1 =~ asser_t3", "asser_t2 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t2 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t2 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t3 ~ asser_t2 1.000 1.000 1.000 1.000 NA NA
d_asser_1 =~ asser_t3 1.000 1.000 1.000 0.505 NA NA
d_asser_1 ~1 0.019 -0.024 0.061 0.074 0.861 0.389
asser_t2 ~1 3.174 3.051 3.298 6.356 50.321 0.000
d_asser_1 ~~ d_asser_1 0.064 0.006 0.121 1.000 2.166 0.030
asser_t2 ~~ d_asser_1 -0.032 -0.063 -0.001 -0.260 -1.998 0.046
asser_t2 ~ frequ 0.205 0.078 0.332 0.257 3.160 0.002
d_asser_1 ~ frequ -0.001 -0.082 0.079 -0.004 -0.036 0.971
frequ ~~ frequ 0.390 0.255 0.525 1.000 5.669 0.000

The moderation effect of the frequency of self-improvement behaviors with the assertiveness change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.001, p = 0.971.

6.6.7.5 Energy - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7225.895 7310.539 0.962 0.057 0.062
# parameters of interest
params_lcs_energ_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t3 ~ energ_t2", "d_energ_1 =~ energ_t3", "energ_t2 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", "d_energ_1 ~ sb07_03_t1", # change goals
                     "d_energ_1 ~1 ", "energ_t2 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t3 ~ energ_t2 1.000 1.000 1.000 1.016 NA NA
d_energ_1 =~ energ_t3 1.000 1.000 1.000 0.619 NA NA
d_energ_1 ~1 -0.008 -0.074 0.059 -0.046 -0.224 0.823
energ_t2 ~1 2.450 2.242 2.658 9.113 23.072 0.000
d_energ_1 ~~ d_energ_1 0.027 -0.004 0.057 1.000 1.720 0.085
energ_t2 ~~ d_energ_1 -0.015 -0.033 0.004 -0.353 -1.538 0.124
d_energ_1 ~ sb07_03_t1 0.002 -0.018 0.021 0.012 0.152 0.879
sb07_03_t1 ~~ sb07_03_t1 1.598 1.386 1.811 1.000 14.753 0.000

The moderation effect of the facet-specific change goal with the energy change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.002, p = 0.879.

6.6.7.6 Energy - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8553.011 8663.416 0.957 0.056 0.063
# parameters of interest
params_lcs_energ_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_energ_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t3 ~ energ_t2", "d_energ_1 =~ energ_t3", "energ_t2 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t2 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t2 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t3 ~ energ_t2 1.000 1.000 1.000 1.019 NA NA
d_energ_1 =~ energ_t3 1.000 1.000 1.000 0.620 NA NA
d_energ_1 ~1 -0.003 -0.033 0.027 -0.015 -0.172 0.863
energ_t2 ~1 2.700 2.587 2.812 9.222 46.966 0.000
d_energ_1 ~~ d_energ_1 0.032 -0.004 0.067 1.000 1.751 0.080
energ_t2 ~~ d_energ_1 -0.017 -0.038 0.003 -0.343 -1.640 0.101
energ_t2 ~ frequ -0.131 -0.262 0.000 -0.276 -1.965 0.049
d_energ_1 ~ frequ 0.005 -0.060 0.070 0.018 0.155 0.877
frequ ~~ frequ 0.382 0.246 0.517 1.000 5.502 0.000

The moderation effect of the frequency of self-improvement behaviors with the energy change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.005, p = 0.877.

6.6.7.7 Compassion - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7068.754 7153.398 0.947 0.06 0.062
# parameters of interest
params_lcs_compa_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t3 ~ compa_t2", "d_compa_1 =~ compa_t3", "compa_t2 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", "d_compa_1 ~ sb07_04_t1", # change goals
                     "d_compa_1 ~1 ", "compa_t2 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t3 ~ compa_t2 1.000 1.000 1.000 0.915 NA NA
d_compa_1 =~ compa_t3 1.000 1.000 1.000 0.391 NA NA
d_compa_1 ~1 0.183 0.030 0.337 0.692 2.345 0.019
compa_t2 ~1 4.540 4.354 4.726 7.311 47.955 0.000
d_compa_1 ~~ d_compa_1 0.055 -0.032 0.143 0.790 1.245 0.213
compa_t2 ~~ d_compa_1 -0.014 -0.092 0.064 -0.098 -0.352 0.725
d_compa_1 ~ sb07_04_t1 -0.089 -0.151 -0.028 -0.458 -2.832 0.005
sb07_04_t1 ~~ sb07_04_t1 1.845 1.652 2.037 1.000 18.759 0.000

The moderation effect of the facet-specific change goal with the compassion change score from T2 to T3 (current-self) is not significantly different from zero (at p < . 001), b = -0.089, p = 0.005.

6.6.7.8 Compassion - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8349.071 8459.476 0.926 0.068 0.081
# parameters of interest
params_lcs_compa_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_compa_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t3 ~ compa_t2", "d_compa_1 =~ compa_t3", "compa_t2 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t2 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t2 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t3 ~ compa_t2 1.000 1.000 1.000 0.917 NA NA
d_compa_1 =~ compa_t3 1.000 1.000 1.000 0.371 NA NA
d_compa_1 ~1 -0.058 -0.137 0.022 -0.215 -1.412 0.158
compa_t2 ~1 4.280 4.186 4.373 6.467 89.925 0.000
d_compa_1 ~~ d_compa_1 0.070 -0.033 0.174 0.977 1.329 0.184
compa_t2 ~~ d_compa_1 0.014 -0.083 0.112 0.087 0.292 0.770
compa_t2 ~ frequ 0.338 0.159 0.518 0.327 3.695 0.000
d_compa_1 ~ frequ -0.064 -0.183 0.055 -0.153 -1.058 0.290
frequ ~~ frequ 0.410 0.269 0.551 1.000 5.698 0.000

The moderation effect of the frequency of self-improvement behaviors with the compassion change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.064, p = 0.29.

6.6.7.9 Respectfulness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6160.624 6245.268 0.986 0.034 0.045
# parameters of interest
params_lcs_respe_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t3 ~ respe_t2", "d_respe_1 =~ respe_t3", "respe_t2 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", "d_respe_1 ~ sb07_05_t1", # change goals
                     "d_respe_1 ~1 ", "respe_t2 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t3 ~ respe_t2 1.000 1.000 1.000 0.918 NA NA
d_respe_1 =~ respe_t3 1.000 1.000 1.000 0.366 NA NA
d_respe_1 ~1 -0.023 -0.108 0.061 -0.138 -0.543 0.587
respe_t2 ~1 4.735 4.628 4.843 11.148 86.427 0.000
d_respe_1 ~~ d_respe_1 0.028 -0.005 0.062 0.990 1.680 0.093
respe_t2 ~~ d_respe_1 0.005 -0.020 0.030 0.072 0.388 0.698
d_respe_1 ~ sb07_05_t1 0.013 -0.020 0.045 0.101 0.758 0.448
sb07_05_t1 ~~ sb07_05_t1 1.849 1.617 2.081 1.000 15.617 0.000

The moderation effect of the facet-specific change goal with the respectfulness change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.013, p = 0.448.

6.6.7.10 Respectfulness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 7442.348 7552.753 0.974 0.043 0.052
# parameters of interest
params_lcs_respe_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_respe_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t3 ~ respe_t2", "d_respe_1 =~ respe_t3", "respe_t2 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t2 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t2 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t3 ~ respe_t2 1.000 1.000 1.000 0.917 NA NA
d_respe_1 =~ respe_t3 1.000 1.000 1.000 0.367 NA NA
d_respe_1 ~1 0.006 -0.039 0.050 0.034 0.257 0.797
respe_t2 ~1 4.489 4.420 4.559 10.600 127.169 0.000
d_respe_1 ~~ d_respe_1 0.028 -0.005 0.061 0.970 1.651 0.099
respe_t2 ~~ d_respe_1 0.005 -0.020 0.031 0.079 0.411 0.681
respe_t2 ~ frequ 0.158 0.049 0.266 0.235 2.851 0.004
d_respe_1 ~ frequ -0.046 -0.120 0.027 -0.173 -1.232 0.218
frequ ~~ frequ 0.399 0.262 0.537 1.000 5.691 0.000

The moderation effect of the frequency of self-improvement behaviors with the respectfulness change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.046, p = 0.218.

6.6.7.11 Trust - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7402.299 7486.943 0.965 0.051 0.053
# parameters of interest
params_lcs_trust_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t3 ~ trust_t2", "d_trust_1 =~ trust_t3", "trust_t2 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", "d_trust_1 ~ sb07_06_t1", # change goals
                     "d_trust_1 ~1 ", "trust_t2 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t3 ~ trust_t2 1.000 1.000 1.000 0.960 NA NA
d_trust_1 =~ trust_t3 1.000 1.000 1.000 0.329 NA NA
d_trust_1 ~1 -0.008 -0.136 0.119 -0.046 -0.128 0.898
trust_t2 ~1 2.585 2.355 2.815 4.883 22.023 0.000
d_trust_1 ~~ d_trust_1 0.033 -0.012 0.077 0.998 1.448 0.148
trust_t2 ~~ d_trust_1 -0.005 -0.045 0.035 -0.053 -0.247 0.805
d_trust_1 ~ sb07_06_t1 0.006 -0.037 0.049 0.047 0.283 0.777
sb07_06_t1 ~~ sb07_06_t1 1.847 1.664 2.031 1.000 19.773 0.000

The moderation effect of the facet-specific change goal with the trust change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.006, p = 0.777.

6.6.7.12 Trust - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8666.936 8777.341 0.97 0.044 0.06
# parameters of interest
params_lcs_trust_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_trust_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t3 ~ trust_t2", "d_trust_1 =~ trust_t3", "trust_t2 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t2 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t2 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t3 ~ trust_t2 1.000 1.000 1.000 0.961 NA NA
d_trust_1 =~ trust_t3 1.000 1.000 1.000 0.332 NA NA
d_trust_1 ~1 0.008 -0.044 0.060 0.046 0.300 0.764
trust_t2 ~1 2.712 2.583 2.841 5.472 41.328 0.000
d_trust_1 ~~ d_trust_1 0.029 -0.010 0.069 0.998 1.460 0.144
trust_t2 ~~ d_trust_1 -0.005 -0.040 0.030 -0.061 -0.282 0.778
trust_t2 ~ frequ -0.136 -0.280 0.007 -0.173 -1.862 0.063
d_trust_1 ~ frequ -0.011 -0.109 0.086 -0.042 -0.229 0.819
frequ ~~ frequ 0.395 0.258 0.531 1.000 5.675 0.000

The moderation effect of the self-improvement behaviors with the trust change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.011, p = 0.819.

6.6.7.13 Organization - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6796.285 6880.929 0.965 0.07 0.04
# parameters of interest
params_lcs_organ_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t3 ~ organ_t2", "d_organ_1 =~ organ_t3", "organ_t2 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", "d_organ_1 ~ sb07_07_t1", # change goals
                     "d_organ_1 ~1 ", "organ_t2 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t3 ~ organ_t2 1.000 1.000 1.000 1.027 NA NA
d_organ_1 =~ organ_t3 1.000 1.000 1.000 0.466 NA NA
d_organ_1 ~1 0.088 -0.110 0.287 0.181 0.873 0.383
organ_t2 ~1 1.388 1.082 1.694 1.293 8.881 0.000
d_organ_1 ~~ d_organ_1 0.232 0.065 0.398 0.977 2.731 0.006
organ_t2 ~~ d_organ_1 -0.102 -0.215 0.012 -0.243 -1.761 0.078
d_organ_1 ~ sb07_07_t1 -0.050 -0.108 0.007 -0.153 -1.725 0.085
sb07_07_t1 ~~ sb07_07_t1 2.187 1.980 2.394 1.000 20.736 0.000

The moderation effect of the facet-specific change goal with the organization change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.05, p = 0.085.

6.6.7.14 Organization - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8102.581 8212.986 0.974 0.051 0.043
# parameters of interest
params_lcs_organ_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_organ_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t3 ~ organ_t2", "d_organ_1 =~ organ_t3", "organ_t2 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t2 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t2 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t3 ~ organ_t2 1.000 1.000 1.000 1.022 NA NA
d_organ_1 =~ organ_t3 1.000 1.000 1.000 0.467 NA NA
d_organ_1 ~1 -0.073 -0.160 0.015 -0.157 -1.633 0.103
organ_t2 ~1 2.734 2.583 2.885 2.685 35.435 0.000
d_organ_1 ~~ d_organ_1 0.211 0.061 0.360 0.974 2.766 0.006
organ_t2 ~~ d_organ_1 -0.142 -0.245 -0.038 -0.306 -2.676 0.007
organ_t2 ~ frequ -0.245 -0.470 -0.020 -0.150 -2.138 0.032
d_organ_1 ~ frequ -0.120 -0.267 0.027 -0.162 -1.606 0.108
frequ ~~ frequ 0.390 0.253 0.528 1.000 5.562 0.000

The moderation effect of the frequency of self-improvement behaviors with the organization change score from T2 to T3 (current-self) is not significantly different from zero (at p < .001), b = -0.12, p = 0.108.

6.6.7.15 Productiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6884.26 6968.904 0.953 0.076 0.049
# parameters of interest
params_lcs_produ_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t3 ~ produ_t2", "d_produ_1 =~ produ_t3", "produ_t2 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", "d_produ_1 ~ sb07_08_t1", # change goals
                     "d_produ_1 ~1 ", "produ_t2 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t3 ~ produ_t2 1.000 1.000 1.000 1.017 NA NA
d_produ_1 =~ produ_t3 1.000 1.000 1.000 0.594 NA NA
d_produ_1 ~1 0.145 -0.103 0.392 0.272 1.145 0.252
produ_t2 ~1 1.831 1.450 2.212 2.009 9.423 0.000
d_produ_1 ~~ d_produ_1 0.281 0.091 0.471 0.992 2.894 0.004
produ_t2 ~~ d_produ_1 -0.132 -0.258 -0.006 -0.328 -2.048 0.041
d_produ_1 ~ sb07_08_t1 -0.034 -0.097 0.029 -0.088 -1.060 0.289
sb07_08_t1 ~~ sb07_08_t1 1.880 1.615 2.144 1.000 13.934 0.000

The moderation effect of the facet-specific change goal with the productiveness change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.034, p = 0.289.

6.6.7.16 Productiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8224.842 8335.247 0.946 0.071 0.051
# parameters of interest
params_lcs_produ_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_produ_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t3 ~ produ_t2", "d_produ_1 =~ produ_t3", "produ_t2 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t2 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t2 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t3 ~ produ_t2 1.000 1.000 1.000 1.011 NA NA
d_produ_1 =~ produ_t3 1.000 1.000 1.000 0.594 NA NA
d_produ_1 ~1 0.015 -0.072 0.101 0.028 0.327 0.743
produ_t2 ~1 3.211 3.067 3.355 3.617 43.783 0.000
d_produ_1 ~~ d_produ_1 0.268 0.087 0.450 0.987 2.904 0.004
produ_t2 ~~ d_produ_1 -0.134 -0.257 -0.010 -0.297 -2.124 0.034
produ_t2 ~ frequ -0.289 -0.513 -0.066 -0.204 -2.539 0.011
d_produ_1 ~ frequ 0.094 -0.068 0.256 0.112 1.132 0.257
frequ ~~ frequ 0.390 0.251 0.530 1.000 5.493 0.000

The frequency of self-improvement behaviors significantly moderates changes in productiveness (current-self) from T2 to T3, b = 0.094, p = 0.257.

6.6.7.17 Responsibility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7230.617 7315.261 0.92 0.08 0.074
# parameters of interest
params_lcs_respo_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t3 ~ respo_t2", "d_respo_1 =~ respo_t3", "respo_t2 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", "d_respo_1 ~ sb07_09_t1", # change goals
                     "d_respo_1 ~1 ", "respo_t2 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t3 ~ respo_t2 1.000 1.000 1.000 1.017 NA NA
d_respo_1 =~ respo_t3 1.000 1.000 1.000 0.684 NA NA
d_respo_1 ~1 -0.057 -0.197 0.083 -0.162 -0.799 0.425
respo_t2 ~1 4.134 3.928 4.340 7.880 39.266 0.000
d_respo_1 ~~ d_respo_1 0.124 0.027 0.220 0.993 2.507 0.012
respo_t2 ~~ d_respo_1 -0.060 -0.110 -0.010 -0.360 -2.370 0.018
d_respo_1 ~ sb07_09_t1 0.020 -0.022 0.062 0.084 0.924 0.356
sb07_09_t1 ~~ sb07_09_t1 2.211 2.012 2.409 1.000 21.798 0.000

The moderation effect of the facet-specific change goal with the responsibility change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.02, p = 0.356.

6.6.7.18 Responsibility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8486.343 8596.748 0.932 0.067 0.074
# parameters of interest
params_lcs_respo_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_respo_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t3 ~ respo_t2", "d_respo_1 =~ respo_t3", "respo_t2 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t2 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t2 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t3 ~ respo_t2 1.000 1.000 1.000 1.011 NA NA
d_respo_1 =~ respo_t3 1.000 1.000 1.000 0.680 NA NA
d_respo_1 ~1 0.004 -0.059 0.067 0.010 0.117 0.907
respo_t2 ~1 3.680 3.570 3.791 6.707 65.147 0.000
d_respo_1 ~~ d_respo_1 0.136 0.026 0.246 1.000 2.429 0.015
respo_t2 ~~ d_respo_1 -0.071 -0.125 -0.017 -0.353 -2.579 0.010
respo_t2 ~ frequ 0.071 -0.090 0.233 0.081 0.862 0.389
d_respo_1 ~ frequ -0.007 -0.133 0.119 -0.012 -0.106 0.916
frequ ~~ frequ 0.394 0.255 0.532 1.000 5.562 0.000

The moderation effect of the frequency of self-improvement behaviors with the responsibility change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.007, p = 0.916.

6.6.7.19 Anxiety - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7295.89 7380.534 0.996 0.019 0.037
# parameters of interest
params_lcs_anxie_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t3 ~ anxie_t2", "d_anxie_1 =~ anxie_t3", "anxie_t2 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", "d_anxie_1 ~ sb07_10_t1", # change goals
                     "d_anxie_1 ~1 ", "anxie_t2 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t3 ~ anxie_t2 1.000 1.000 1.000 1.025 NA NA
d_anxie_1 =~ anxie_t3 1.000 1.000 1.000 0.477 NA NA
d_anxie_1 ~1 0.252 0.056 0.448 0.649 2.518 0.012
anxie_t2 ~1 3.986 3.714 4.259 4.791 28.633 0.000
d_anxie_1 ~~ d_anxie_1 0.145 0.048 0.242 0.967 2.939 0.003
anxie_t2 ~~ d_anxie_1 -0.121 -0.201 -0.042 -0.442 -2.996 0.003
d_anxie_1 ~ sb07_10_t1 -0.046 -0.099 0.006 -0.182 -1.732 0.083
sb07_10_t1 ~~ sb07_10_t1 2.322 2.077 2.568 1.000 18.545 0.000

The facet-specific change goal significantly moderates changes in anxiety from T2 to T3 (current-self), b = -0.046, p = 0.083. Main effect was an increase in anxiety from T2 to T3 and this increase was less pronounced for those with a higher anxiety change goal.

6.6.7.20 Anxiety - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8582.599 8693.004 0.976 0.041 0.048
# parameters of interest
params_lcs_anxie_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_anxie_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t3 ~ anxie_t2", "d_anxie_1 =~ anxie_t3", "anxie_t2 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t2 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t2 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t3 ~ anxie_t2 1.000 1.000 1.000 1.033 NA NA
d_anxie_1 =~ anxie_t3 1.000 1.000 1.000 0.484 NA NA
d_anxie_1 ~1 0.085 0.002 0.168 0.217 2.012 0.044
anxie_t2 ~1 3.001 2.862 3.139 3.582 42.380 0.000
d_anxie_1 ~~ d_anxie_1 0.153 0.053 0.253 0.994 2.999 0.003
anxie_t2 ~~ d_anxie_1 -0.098 -0.180 -0.017 -0.300 -2.376 0.018
anxie_t2 ~ frequ 0.021 -0.201 0.242 0.016 0.183 0.855
d_anxie_1 ~ frequ -0.048 -0.211 0.114 -0.077 -0.582 0.561
frequ ~~ frequ 0.397 0.258 0.537 1.000 5.580 0.000

The moderation effect of the frequency of self-improvement behaviors with the anxiety change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.048, p = 0.561.

6.6.7.21 Depression - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7101.267 7185.911 0.97 0.065 0.054
# parameters of interest
params_lcs_depre_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t3 ~ depre_t2", "d_depre_1 =~ depre_t3", "depre_t2 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", "d_depre_1 ~ sb07_11_t1", # change goals
                     "d_depre_1 ~1 ", "depre_t2 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t3 ~ depre_t2 1.000 1.000 1.000 0.993 NA NA
d_depre_1 =~ depre_t3 1.000 1.000 1.000 0.565 NA NA
d_depre_1 ~1 -0.060 -0.168 0.048 -0.179 -1.083 0.279
depre_t2 ~1 4.064 3.877 4.252 6.942 42.396 0.000
d_depre_1 ~~ d_depre_1 0.109 0.055 0.162 0.979 3.980 0.000
depre_t2 ~~ d_depre_1 -0.034 -0.063 -0.006 -0.239 -2.376 0.018
d_depre_1 ~ sb07_11_t1 0.030 -0.003 0.063 0.144 1.762 0.078
sb07_11_t1 ~~ sb07_11_t1 2.619 2.421 2.817 1.000 25.943 0.000

The moderation effect of the facet-specific change goal with the depression change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.03, p = 0.078.

6.6.7.22 Depression - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8411.381 8521.786 0.936 0.08 0.086
# parameters of interest
params_lcs_depre_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_depre_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t3 ~ depre_t2", "d_depre_1 =~ depre_t3", "depre_t2 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t2 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t2 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t3 ~ depre_t2 1.000 1.000 1.000 0.993 NA NA
d_depre_1 =~ depre_t3 1.000 1.000 1.000 0.561 NA NA
d_depre_1 ~1 0.038 -0.019 0.095 0.113 1.318 0.188
depre_t2 ~1 3.279 3.156 3.402 5.488 52.202 0.000
d_depre_1 ~~ d_depre_1 0.114 0.058 0.170 1.000 3.970 0.000
depre_t2 ~~ d_depre_1 -0.054 -0.088 -0.021 -0.270 -3.213 0.001
depre_t2 ~ frequ 0.006 -0.144 0.156 0.006 0.077 0.939
d_depre_1 ~ frequ 0.001 -0.096 0.099 0.002 0.022 0.982
frequ ~~ frequ 0.396 0.255 0.537 1.000 5.518 0.000

The moderation effect of the frequency of self-improvement behaviors with the depression change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.001, p = 0.982.

6.6.7.23 Volatility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7222.467 7307.111 0.989 0.034 0.033
# parameters of interest
params_lcs_volat_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t3 ~ volat_t2", "d_volat_1 =~ volat_t3", "volat_t2 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", "d_volat_1 ~ sb07_12_t1", # change goals
                     "d_volat_1 ~1 ", "volat_t2 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t3 ~ volat_t2 1.000 1.000 1.000 0.998 NA NA
d_volat_1 =~ volat_t3 1.000 1.000 1.000 0.419 NA NA
d_volat_1 ~1 0.150 -0.021 0.320 0.392 1.718 0.086
volat_t2 ~1 2.306 2.047 2.565 2.533 17.459 0.000
d_volat_1 ~~ d_volat_1 0.140 0.032 0.248 0.960 2.533 0.011
volat_t2 ~~ d_volat_1 -0.046 -0.126 0.034 -0.144 -1.119 0.263
d_volat_1 ~ sb07_12_t1 -0.052 -0.113 0.008 -0.199 -1.692 0.091
sb07_12_t1 ~~ sb07_12_t1 2.109 1.902 2.316 1.000 19.963 0.000

The moderation effect of the facet-specific change goal with the volatility change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.052, p = 0.091.

6.6.7.24 Volatility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8483.733 8594.138 1 0 0.031
# parameters of interest
params_lcs_volat_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_volat_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t3 ~ volat_t2", "d_volat_1 =~ volat_t3", "volat_t2 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t2 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t2 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t3 ~ volat_t2 1.000 1.000 1.000 0.998 NA NA
d_volat_1 =~ volat_t3 1.000 1.000 1.000 0.418 NA NA
d_volat_1 ~1 0.006 -0.078 0.089 0.015 0.132 0.895
volat_t2 ~1 2.951 2.813 3.089 3.270 41.853 0.000
d_volat_1 ~~ d_volat_1 0.141 0.034 0.249 0.992 2.574 0.010
volat_t2 ~~ d_volat_1 -0.070 -0.150 0.009 -0.207 -1.730 0.084
volat_t2 ~ frequ -0.018 -0.227 0.192 -0.012 -0.164 0.870
d_volat_1 ~ frequ -0.053 -0.203 0.098 -0.088 -0.686 0.493
frequ ~~ frequ 0.395 0.258 0.532 1.000 5.643 0.000

The moderation effect of the frequency of self-improvement behaviors with the volatility change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.053, p = 0.493.

6.6.7.25 Curiosity - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6933.358 7018.002 0.994 0.021 0.037
# parameters of interest
params_lcs_curio_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t3 ~ curio_t2", "d_curio_1 =~ curio_t3", "curio_t2 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", "d_curio_1 ~ sb07_13_t1", # change goals
                     "d_curio_1 ~1 ", "curio_t2 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t3 ~ curio_t2 1.000 1.000 1.000 1.105 NA NA
d_curio_1 =~ curio_t3 1.000 1.000 1.000 0.421 NA NA
d_curio_1 ~1 -0.005 -0.109 0.098 -0.030 -0.099 0.921
curio_t2 ~1 4.389 4.220 4.559 9.561 50.860 0.000
d_curio_1 ~~ d_curio_1 0.031 -0.005 0.066 1.000 1.707 0.088
curio_t2 ~~ d_curio_1 -0.035 -0.067 -0.002 -0.446 -2.087 0.037
d_curio_1 ~ sb07_13_t1 -0.002 -0.041 0.037 -0.015 -0.102 0.919
sb07_13_t1 ~~ sb07_13_t1 1.719 1.512 1.926 1.000 16.250 0.000

The moderation effect of the facet-specific change goal with the curiosity change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.002, p = 0.919.

6.6.7.26 Curiosity - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8225.646 8336.051 0.976 0.039 0.053
# parameters of interest
params_lcs_curio_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_curio_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t3 ~ curio_t2", "d_curio_1 =~ curio_t3", "curio_t2 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t2 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t2 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t3 ~ curio_t2 1.000 1.000 1.000 1.103 NA NA
d_curio_1 =~ curio_t3 1.000 1.000 1.000 0.418 NA NA
d_curio_1 ~1 -0.010 -0.056 0.037 -0.056 -0.405 0.685
curio_t2 ~1 4.189 4.096 4.281 9.342 88.360 0.000
d_curio_1 ~~ d_curio_1 0.028 -0.004 0.061 0.979 1.697 0.090
curio_t2 ~~ d_curio_1 -0.030 -0.060 0.001 -0.405 -1.885 0.059
curio_t2 ~ frequ 0.180 0.044 0.316 0.252 2.600 0.009
d_curio_1 ~ frequ -0.040 -0.126 0.047 -0.146 -0.900 0.368
frequ ~~ frequ 0.394 0.254 0.534 1.000 5.499 0.000

The moderation effect of the frequency of self-improvement behaviors with the curiosity change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.04, p = 0.368.

6.6.7.27 Aesthetic - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7151.964 7236.608 0.984 0.041 0.044
# parameters of interest
params_lcs_aesth_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t3 ~ aesth_t2", "d_aesth_1 =~ aesth_t3", "aesth_t2 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", "d_aesth_1 ~ sb07_14_t1", # change goals
                     "d_aesth_1 ~1 ", "aesth_t2 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t3 ~ aesth_t2 1.000 1.000 1.000 1.048 NA NA
d_aesth_1 =~ aesth_t3 1.000 1.000 1.000 0.441 NA NA
d_aesth_1 ~1 0.012 -0.027 0.050 0.128 0.600 0.548
aesth_t2 ~1 2.854 2.702 3.007 13.067 36.744 0.000
d_aesth_1 ~~ d_aesth_1 0.008 -0.005 0.022 0.983 1.210 0.226
aesth_t2 ~~ d_aesth_1 -0.006 -0.016 0.004 -0.319 -1.254 0.210
d_aesth_1 ~ sb07_14_t1 -0.009 -0.023 0.005 -0.130 -1.210 0.226
sb07_14_t1 ~~ sb07_14_t1 1.910 1.720 2.100 1.000 19.738 0.000

The moderation effect of the facet-specific change goal with the aesthetic change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.009, p = 0.226.

6.6.7.28 Aesthetic - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8403.449 8513.854 0.971 0.051 0.05
# parameters of interest
params_lcs_aesth_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_aesth_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t3 ~ aesth_t2", "d_aesth_1 =~ aesth_t3", "aesth_t2 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t2 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t2 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t3 ~ aesth_t2 1.000 1.000 1.000 1.047 NA NA
d_aesth_1 =~ aesth_t3 1.000 1.000 1.000 0.440 NA NA
d_aesth_1 ~1 -0.012 -0.031 0.007 -0.133 -1.254 0.210
aesth_t2 ~1 2.858 2.723 2.993 13.045 41.461 0.000
d_aesth_1 ~~ d_aesth_1 0.008 -0.005 0.022 0.997 1.216 0.224
aesth_t2 ~~ d_aesth_1 -0.006 -0.016 0.004 -0.310 -1.247 0.212
aesth_t2 ~ frequ -0.066 -0.147 0.014 -0.191 -1.616 0.106
d_aesth_1 ~ frequ 0.008 -0.026 0.042 0.055 0.466 0.641
frequ ~~ frequ 0.395 0.256 0.534 1.000 5.579 0.000

The moderation effect of the frequency of self-improvement behaviors with the aesthetic change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.008, p = 0.641.

6.6.7.29 Imagination - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6692.048 6776.692 0.95 0.069 0.063
# parameters of interest
params_lcs_imagi_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t3 ~ imagi_t2", "d_imagi_1 =~ imagi_t3", "imagi_t2 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", "d_imagi_1 ~ sb07_15_t1", # change goals
                     "d_imagi_1 ~1 ", "imagi_t2 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t3 ~ imagi_t2 1.000 1.000 1.000 1.147 NA NA
d_imagi_1 =~ imagi_t3 1.000 1.000 1.000 0.577 NA NA
d_imagi_1 ~1 -0.058 -0.210 0.094 -0.159 -0.746 0.456
imagi_t2 ~1 4.224 4.022 4.425 5.866 41.089 0.000
d_imagi_1 ~~ d_imagi_1 0.129 0.034 0.223 0.979 2.664 0.008
imagi_t2 ~~ d_imagi_1 -0.116 -0.196 -0.036 -0.473 -2.850 0.004
d_imagi_1 ~ sb07_15_t1 0.037 -0.011 0.085 0.144 1.502 0.133
sb07_15_t1 ~~ sb07_15_t1 2.008 1.812 2.203 1.000 20.155 0.000

The moderation effect of the facet-specific change goal with the imagination change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.037, p = 0.133.

6.6.7.30 Imagination - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 7938.351 8048.756 0.959 0.057 0.059
# parameters of interest
params_lcs_imagi_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_imagi_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t3 ~ imagi_t2", "d_imagi_1 =~ imagi_t3", "imagi_t2 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t2 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t2 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t3 ~ imagi_t2 1.000 1.000 1.000 1.146 NA NA
d_imagi_1 =~ imagi_t3 1.000 1.000 1.000 0.578 NA NA
d_imagi_1 ~1 0.056 -0.014 0.126 0.154 1.576 0.115
imagi_t2 ~1 3.737 3.636 3.839 5.146 71.916 0.000
d_imagi_1 ~~ d_imagi_1 0.133 0.036 0.231 0.993 2.686 0.007
imagi_t2 ~~ d_imagi_1 -0.123 -0.207 -0.040 -0.489 -2.898 0.004
imagi_t2 ~ frequ 0.362 0.169 0.555 0.311 3.673 0.000
d_imagi_1 ~ frequ -0.048 -0.173 0.077 -0.082 -0.755 0.450
frequ ~~ frequ 0.390 0.257 0.523 1.000 5.731 0.000

The moderation effect of the frequency of self-improvement behaviors with the imagination change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.048, p = 0.45.

6.6.8 Big Five facets (ideal self)

6.6.8.1 Sociability - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7936.436 8024.366 0.96 0.042 0.046
# parameters of interest
params_lcs_socia_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", "d_socia_1 ~ sb07_01_t1", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.980 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.624 NA NA
d_socia_1 ~1 0.145 -0.034 0.324 0.536 1.584 0.113
socia_t1 ~1 4.029 3.797 4.261 9.498 34.046 0.000
d_socia_1 ~~ d_socia_1 0.069 0.011 0.127 0.945 2.323 0.020
socia_t1 ~~ d_socia_1 -0.028 -0.061 0.005 -0.255 -1.649 0.099
d_socia_1 ~ sb07_01_t1 -0.050 -0.099 -0.002 -0.235 -2.023 0.043
sb07_01_t1 ~~ sb07_01_t1 1.597 1.400 1.794 1.000 15.898 0.000

The moderation effect of the facet-specific change goal with the sociability change score (ideal-self) is not significantly different from zero, b = -0.05, p = 0.043.

6.6.8.2 Sociability - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9104.029 9218.72 0.953 0.046 0.056
# parameters of interest
params_lcs_socia_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_socia_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.982 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.626 NA NA
d_socia_1 ~1 -0.032 -0.089 0.026 -0.115 -1.087 0.277
socia_t1 ~1 4.241 4.158 4.324 9.796 100.182 0.000
d_socia_1 ~~ d_socia_1 0.075 0.012 0.137 0.980 2.343 0.019
socia_t1 ~~ d_socia_1 -0.036 -0.074 0.002 -0.307 -1.867 0.062
socia_t1 ~ frequ 0.062 -0.064 0.189 0.091 0.964 0.335
d_socia_1 ~ frequ 0.061 -0.054 0.176 0.140 1.042 0.297
frequ ~~ frequ 0.399 0.261 0.538 1.000 5.660 0.000

The moderation effect of the frequency of self-improvement behaviors with sociability change score (ideal-self) is not significantly different from zero, b = 0.061, p = 0.297.

6.6.8.3 Assertiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8045.558 8133.488 0.946 0.048 0.047
# parameters of interest
params_lcs_asser_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", "d_asser_1 ~ sb07_02_t1", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.974 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.629 NA NA
d_asser_1 ~1 -0.013 -0.135 0.109 -0.066 -0.211 0.833
asser_t1 ~1 4.114 3.962 4.266 13.358 53.180 0.000
d_asser_1 ~~ d_asser_1 0.040 -0.009 0.088 1.000 1.595 0.111
asser_t1 ~~ d_asser_1 -0.017 -0.042 0.008 -0.281 -1.346 0.178
d_asser_1 ~ sb07_02_t1 0.002 -0.030 0.035 0.016 0.148 0.882
sb07_02_t1 ~~ sb07_02_t1 1.688 1.496 1.881 1.000 17.182 0.000

The moderation effect of the facet-specific change goal with the assertiveness change score (ideal-self) is not significantly different from zero, b = 0.002, p = 0.882.

6.6.8.4 Assertiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9162.303 9276.995 0.972 0.035 0.043
# parameters of interest
params_lcs_asser_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_asser_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.978 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.653 NA NA
d_asser_1 ~1 -0.004 -0.043 0.035 -0.020 -0.205 0.837
asser_t1 ~1 4.145 4.064 4.226 13.499 100.349 0.000
d_asser_1 ~~ d_asser_1 0.042 -0.006 0.090 0.997 1.720 0.086
asser_t1 ~~ d_asser_1 -0.020 -0.045 0.005 -0.345 -1.593 0.111
asser_t1 ~ frequ 0.179 0.077 0.281 0.372 3.447 0.001
d_asser_1 ~ frequ 0.017 -0.052 0.086 0.054 0.493 0.622
frequ ~~ frequ 0.405 0.269 0.541 1.000 5.845 0.000

The moderation effect of the frequency of self-improvement behaviors with the assertiveness change score (ideal-self) is not significantly different from zero, b = 0.017, p = 0.622.

6.6.8.5 Energy - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7893.195 7981.125 0.949 0.039 0.046
# parameters of interest
params_lcs_energ_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", "d_energ_1 ~ sb07_03_t1", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.802 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.569 NA NA
d_energ_1 ~1 0.005 -0.076 0.085 0.040 0.118 0.906
energ_t1 ~1 2.314 2.176 2.452 13.687 32.861 0.000
d_energ_1 ~~ d_energ_1 0.014 -0.007 0.036 0.991 1.312 0.189
energ_t1 ~~ d_energ_1 0.001 -0.008 0.010 0.050 0.215 0.830
d_energ_1 ~ sb07_03_t1 0.009 -0.012 0.031 0.096 0.830 0.406
sb07_03_t1 ~~ sb07_03_t1 1.572 1.373 1.770 1.000 15.549 0.000

The moderation effect of the facet-specific change goal with the energy change score (ideal-self) is not significantly different from zero, b = 0.009, p = 0.406.

6.6.8.6 Energy - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9047.43 9162.121 0.967 0.034 0.046
# parameters of interest
params_lcs_energ_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_energ_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.813 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.551 NA NA
d_energ_1 ~1 0.040 0.003 0.076 0.330 2.115 0.034
energ_t1 ~1 2.242 2.124 2.360 12.665 37.296 0.000
d_energ_1 ~~ d_energ_1 0.014 -0.006 0.035 0.991 1.374 0.169
energ_t1 ~~ d_energ_1 0.000 -0.010 0.010 0.009 0.037 0.971
energ_t1 ~ frequ -0.091 -0.171 -0.011 -0.328 -2.229 0.026
d_energ_1 ~ frequ -0.018 -0.076 0.040 -0.095 -0.604 0.546
frequ ~~ frequ 0.407 0.268 0.545 1.000 5.756 0.000

The moderation effect of the frequency of self-improvement behaviors with the energy change score (ideal-self) is not significantly different from zero, b = -0.018, p = 0.546.

6.6.8.7 Compassion - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8389.855 8477.785 0.938 0.048 0.057
# parameters of interest
params_lcs_compa_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", "d_compa_1 ~ sb07_04_t1", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.980 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.429 NA NA
d_compa_1 ~1 -0.151 -0.296 -0.007 -0.686 -2.053 0.040
compa_t1 ~1 4.443 4.285 4.600 8.815 55.369 0.000
d_compa_1 ~~ d_compa_1 0.045 -0.033 0.124 0.933 1.135 0.257
compa_t1 ~~ d_compa_1 -0.013 -0.071 0.046 -0.122 -0.428 0.669
d_compa_1 ~ sb07_04_t1 0.042 -0.009 0.094 0.259 1.601 0.109
sb07_04_t1 ~~ sb07_04_t1 1.843 1.662 2.024 1.000 19.987 0.000

The moderation effect of the facet-specific change goal with the compassion change score (ideal-self) is not significantly different from zero, b = 0.042, p = 0.109.

6.6.8.8 Compassion - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9504.94 9619.631 0.941 0.048 0.066
# parameters of interest
params_lcs_compa_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_compa_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.979 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.433 NA NA
d_compa_1 ~1 -0.042 -0.114 0.030 -0.185 -1.148 0.251
compa_t1 ~1 4.226 4.132 4.320 8.210 88.386 0.000
d_compa_1 ~~ d_compa_1 0.052 -0.031 0.134 0.999 1.230 0.219
compa_t1 ~~ d_compa_1 -0.021 -0.082 0.040 -0.186 -0.676 0.499
compa_t1 ~ frequ 0.194 0.068 0.319 0.240 3.021 0.003
d_compa_1 ~ frequ 0.012 -0.121 0.146 0.035 0.183 0.855
frequ ~~ frequ 0.406 0.266 0.546 1.000 5.672 0.000

The moderation effect of the frequency of self-improvement behaviors with the compassion change score (ideal-self) is not significantly different from zero, b = 0.012, p = 0.855.

6.6.8.9 Respectfulness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 6803.064 6890.994 0.966 0.041 0.046
# parameters of interest
params_lcs_respe_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", "d_respe_1 ~ sb07_05_t1", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.108 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.678 NA NA
d_respe_1 ~1 0.022 -0.067 0.111 0.091 0.483 0.629
respe_t1 ~1 4.797 4.699 4.895 12.175 95.990 0.000
d_respe_1 ~~ d_respe_1 0.058 0.019 0.097 0.997 2.940 0.003
respe_t1 ~~ d_respe_1 -0.044 -0.078 -0.010 -0.470 -2.522 0.012
d_respe_1 ~ sb07_05_t1 -0.009 -0.049 0.030 -0.053 -0.470 0.638
sb07_05_t1 ~~ sb07_05_t1 1.826 1.607 2.046 1.000 16.296 0.000

The moderation effect of the facet-specific change goal with the respectfulness change score (ideal-self) is not significantly different from zero, b = -0.009, p = 0.638.

6.6.8.10 Respectfulness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 7910.311 8025.003 0.969 0.039 0.05
# parameters of interest
params_lcs_respe_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respe_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.108 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.678 NA NA
d_respe_1 ~1 -0.001 -0.051 0.049 -0.004 -0.042 0.967
respe_t1 ~1 4.710 4.650 4.770 11.948 153.622 0.000
d_respe_1 ~~ d_respe_1 0.057 0.018 0.096 0.983 2.894 0.004
respe_t1 ~~ d_respe_1 -0.040 -0.073 -0.006 -0.442 -2.337 0.019
respe_t1 ~ frequ 0.196 0.108 0.285 0.321 4.351 0.000
d_respe_1 ~ frequ -0.049 -0.125 0.027 -0.131 -1.263 0.207
frequ ~~ frequ 0.415 0.274 0.556 1.000 5.782 0.000

The moderation effect of the frequency of self-improvement behaviors with the respectfulness change score (ideal-self) is not significantly different from zero, b = -0.049, p = 0.207.

6.6.8.11 Trust - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8210.959 8298.889 0.957 0.045 0.047
# parameters of interest
params_lcs_trust_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", "d_trust_1 ~ sb07_06_t1", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.896 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.335 NA NA
d_trust_1 ~1 0.106 0.000 0.212 0.814 1.957 0.050
trust_t1 ~1 1.915 1.774 2.055 5.499 26.727 0.000
d_trust_1 ~~ d_trust_1 0.016 -0.018 0.051 0.972 0.939 0.348
trust_t1 ~~ d_trust_1 0.006 -0.016 0.028 0.140 0.562 0.574
d_trust_1 ~ sb07_06_t1 -0.016 -0.051 0.019 -0.167 -0.896 0.370
sb07_06_t1 ~~ sb07_06_t1 1.829 1.657 2.000 1.000 20.861 0.000

The moderation effect of the facet-specific change goal with the trust change score (ideal-self) is not significantly different from zero, b = -0.016, p = 0.37.

6.6.8.12 Trust - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9319.462 9434.154 0.974 0.035 0.046
# parameters of interest
params_lcs_trust_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_trust_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.898 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.333 NA NA
d_trust_1 ~1 0.062 0.017 0.107 0.482 2.701 0.007
trust_t1 ~1 1.900 1.808 1.993 5.490 40.160 0.000
d_trust_1 ~~ d_trust_1 0.016 -0.018 0.050 0.973 0.929 0.353
trust_t1 ~~ d_trust_1 0.008 -0.013 0.030 0.191 0.733 0.463
trust_t1 ~ frequ -0.151 -0.249 -0.053 -0.275 -3.015 0.003
d_trust_1 ~ frequ 0.033 -0.055 0.121 0.163 0.741 0.459
frequ ~~ frequ 0.397 0.260 0.533 1.000 5.701 0.000

The moderation effect of the self-improvement behaviors with the trust change score (ideal-self) is not significantly different from zero, b = 0.033, p = 0.459.

6.6.8.13 Organization - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7316.953 7404.883 0.762 0.086 0.092
# parameters of interest
params_lcs_organ_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", "d_organ_1 ~ sb07_07_t1", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.978 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.720 NA NA
d_organ_1 ~1 -0.106 -0.266 0.055 -0.375 -1.291 0.197
organ_t1 ~1 1.711 1.535 1.886 4.477 19.129 0.000
d_organ_1 ~~ d_organ_1 0.078 0.012 0.143 0.980 2.328 0.020
organ_t1 ~~ d_organ_1 -0.036 -0.084 0.013 -0.335 -1.434 0.151
d_organ_1 ~ sb07_07_t1 0.027 -0.018 0.072 0.143 1.190 0.234
sb07_07_t1 ~~ sb07_07_t1 2.198 2.006 2.391 1.000 22.374 0.000

The moderation effect of the facet-specific change goal with the organization change score (ideal-self) is not significantly different from zero, b = 0.027, p = 0.234.

6.6.8.14 Organization - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 8354.305 8468.996 0.871 0.068 0.081
# parameters of interest
params_lcs_organ_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_organ_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.985 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.712 NA NA
d_organ_1 ~1 -0.021 -0.083 0.040 -0.077 -0.675 0.500
organ_t1 ~1 1.679 1.576 1.782 4.404 31.924 0.000
d_organ_1 ~~ d_organ_1 0.074 0.015 0.133 0.975 2.447 0.014
organ_t1 ~~ d_organ_1 -0.040 -0.087 0.007 -0.401 -1.674 0.094
organ_t1 ~ frequ -0.156 -0.257 -0.054 -0.264 -2.993 0.003
d_organ_1 ~ frequ -0.067 -0.166 0.032 -0.158 -1.333 0.182
frequ ~~ frequ 0.418 0.278 0.559 1.000 5.841 0.000

The moderation effect of the frequency of self-improvement behaviors with the organization change score (ideal-self) is not significantly different from zero (at p < .001), b = -0.067, p = 0.182.

6.6.8.15 Productiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 6176.632 6264.562 0.916 0.071 0.06
# parameters of interest
params_lcs_produ_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", "d_produ_1 ~ sb07_08_t1", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.883 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.578 NA NA
d_produ_1 ~1 -0.097 -0.214 0.020 -0.387 -1.626 0.104
produ_t1 ~1 1.680 1.531 1.830 4.390 21.987 0.000
d_produ_1 ~~ d_produ_1 0.061 0.008 0.114 0.975 2.252 0.024
produ_t1 ~~ d_produ_1 -0.009 -0.040 0.021 -0.101 -0.606 0.544
d_produ_1 ~ sb07_08_t1 0.029 -0.002 0.060 0.159 1.820 0.069
sb07_08_t1 ~~ sb07_08_t1 1.899 1.651 2.148 1.000 14.992 0.000

The moderation effect of the facet-specific change goal with the productiveness change score (ideal-self) is not significantly different from zero, b = 0.029, p = 0.069.

6.6.8.16 Productiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 7274.847 7389.538 0.932 0.062 0.06
# parameters of interest
params_lcs_produ_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_produ_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.885 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.580 NA NA
d_produ_1 ~1 0.012 -0.036 0.059 0.046 0.478 0.633
produ_t1 ~1 1.596 1.517 1.675 4.188 39.495 0.000
d_produ_1 ~~ d_produ_1 0.062 0.009 0.115 0.992 2.274 0.023
produ_t1 ~~ d_produ_1 -0.013 -0.043 0.018 -0.137 -0.820 0.412
produ_t1 ~ frequ -0.121 -0.206 -0.035 -0.201 -2.754 0.006
d_produ_1 ~ frequ -0.034 -0.109 0.041 -0.087 -0.892 0.373
frequ ~~ frequ 0.405 0.265 0.545 1.000 5.678 0.000

The frequency of self-improvement behaviors significantly moderates changes in productiveness (ideal-self), b = -0.034, p = 0.373.

6.6.8.17 Responsibility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7839.417 7927.347 0.935 0.055 0.051
# parameters of interest
params_lcs_respo_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", "d_respo_1 ~ sb07_09_t1", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.019 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.664 NA NA
d_respo_1 ~1 -0.002 -0.098 0.094 -0.011 -0.043 0.965
respo_t1 ~1 4.211 4.072 4.350 14.351 59.248 0.000
d_respo_1 ~~ d_respo_1 0.037 0.001 0.072 1.000 2.031 0.042
respo_t1 ~~ d_respo_1 -0.020 -0.045 0.005 -0.355 -1.569 0.117
d_respo_1 ~ sb07_09_t1 -0.001 -0.029 0.026 -0.010 -0.095 0.924
sb07_09_t1 ~~ sb07_09_t1 2.198 2.013 2.382 1.000 23.300 0.000

The moderation effect of the facet-specific change goal with the responsibility change score (ideal-self) is not significantly different from zero, b = -0.001, p = 0.924.

6.6.8.18 Responsibility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 8879.191 8993.882 0.94 0.053 0.056
# parameters of interest
params_lcs_respo_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respo_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.022 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.667 NA NA
d_respo_1 ~1 -0.006 -0.043 0.031 -0.030 -0.310 0.757
respo_t1 ~1 4.188 4.079 4.297 14.292 75.481 0.000
d_respo_1 ~~ d_respo_1 0.037 0.001 0.072 1.000 2.019 0.044
respo_t1 ~~ d_respo_1 -0.020 -0.044 0.004 -0.370 -1.598 0.110
respo_t1 ~ frequ 0.137 0.039 0.235 0.301 2.731 0.006
d_respo_1 ~ frequ -0.006 -0.074 0.062 -0.021 -0.179 0.858
frequ ~~ frequ 0.414 0.271 0.558 1.000 5.669 0.000

The moderation effect of the frequency of self-improvement behaviors with the responsibility change score (ideal-self) is not significantly different from zero, b = -0.006, p = 0.858.

6.6.8.19 Anxiety - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7993.568 8081.498 0.949 0.031 0.047
# parameters of interest
params_lcs_anxie_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", "d_anxie_1 ~ sb07_10_t1", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.892 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.874 NA NA
d_anxie_1 ~1 0.000 -0.138 0.138 0.001 0.002 0.998
anxie_t1 ~1 4.506 4.370 4.641 17.174 65.163 0.000
d_anxie_1 ~~ d_anxie_1 0.066 0.004 0.128 0.999 2.091 0.037
anxie_t1 ~~ d_anxie_1 -0.024 -0.052 0.004 -0.358 -1.686 0.092
d_anxie_1 ~ sb07_10_t1 -0.006 -0.040 0.028 -0.035 -0.339 0.734
sb07_10_t1 ~~ sb07_10_t1 2.275 2.040 2.510 1.000 18.986 0.000

The moderation effect of the facet-specific change goal with the anxiety change score (ideal-self) is not significantly different from zero, b = -0.006, p = 0.734.

6.6.8.20 Anxiety - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9033.768 9148.459 0.938 0.042 0.056
# parameters of interest
params_lcs_anxie_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_anxie_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.885 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.879 NA NA
d_anxie_1 ~1 -0.023 -0.074 0.027 -0.086 -0.901 0.367
anxie_t1 ~1 4.597 4.535 4.659 16.819 145.507 0.000
d_anxie_1 ~~ d_anxie_1 0.073 0.004 0.143 0.996 2.062 0.039
anxie_t1 ~~ d_anxie_1 -0.025 -0.057 0.006 -0.355 -1.564 0.118
anxie_t1 ~ frequ 0.110 0.007 0.212 0.258 2.102 0.036
d_anxie_1 ~ frequ -0.025 -0.115 0.065 -0.060 -0.549 0.583
frequ ~~ frequ 0.413 0.266 0.560 1.000 5.513 0.000

The moderation effect of the frequency of self-improvement behaviors with the anxiety change score (ideal-self) is not significantly different from zero, b = -0.025, p = 0.583.

6.6.8.21 Depression - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 6793.041 6880.971 0.899 0.069 0.066
# parameters of interest
params_lcs_depre_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", "d_depre_1 ~ sb07_11_t1", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.036 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.885 NA NA
d_depre_1 ~1 0.017 -0.069 0.103 0.068 0.387 0.699
depre_t1 ~1 4.440 4.326 4.554 15.239 76.575 0.000
d_depre_1 ~~ d_depre_1 0.062 0.017 0.106 0.995 2.735 0.006
depre_t1 ~~ d_depre_1 -0.034 -0.063 -0.005 -0.467 -2.288 0.022
d_depre_1 ~ sb07_11_t1 -0.011 -0.036 0.015 -0.069 -0.821 0.412
sb07_11_t1 ~~ sb07_11_t1 2.609 2.418 2.799 1.000 26.880 0.000

The moderation effect of the facet-specific change goal with the depression change score (ideal-self) is not significantly different from zero, b = -0.011, p = 0.412.

6.6.8.22 Depression - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 7788.956 7903.648 0.905 0.067 0.075
# parameters of interest
params_lcs_depre_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_depre_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.036 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.885 NA NA
d_depre_1 ~1 -0.018 -0.058 0.022 -0.072 -0.889 0.374
depre_t1 ~1 4.455 4.384 4.525 15.138 124.689 0.000
d_depre_1 ~~ d_depre_1 0.063 0.017 0.109 0.998 2.709 0.007
depre_t1 ~~ d_depre_1 -0.034 -0.063 -0.005 -0.466 -2.289 0.022
depre_t1 ~ frequ 0.059 -0.027 0.145 0.128 1.353 0.176
d_depre_1 ~ frequ -0.016 -0.083 0.051 -0.040 -0.468 0.640
frequ ~~ frequ 0.403 0.262 0.545 1.000 5.596 0.000

The moderation effect of the frequency of self-improvement behaviors with the depression change score (ideal-self) is not significantly different from zero, b = -0.016, p = 0.64.

6.6.8.23 Volatility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7504.069 7591.999 0.97 0.035 0.042
# parameters of interest
params_lcs_volat_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", "d_volat_1 ~ sb07_12_t1", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.842 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.636 NA NA
d_volat_1 ~1 -0.029 -0.164 0.107 -0.090 -0.414 0.679
volat_t1 ~1 1.647 1.508 1.786 3.934 23.236 0.000
d_volat_1 ~~ d_volat_1 0.098 0.019 0.178 0.985 2.432 0.015
volat_t1 ~~ d_volat_1 -0.013 -0.055 0.029 -0.099 -0.611 0.541
d_volat_1 ~ sb07_12_t1 0.027 -0.015 0.069 0.124 1.265 0.206
sb07_12_t1 ~~ sb07_12_t1 2.104 1.911 2.296 1.000 21.424 0.000

The moderation effect of the facet-specific change goal with the volatility change score (ideal-self) is not significantly different from zero, b = 0.027, p = 0.206.

6.6.8.24 Volatility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 8568.034 8682.725 0.961 0.041 0.053
# parameters of interest
params_lcs_volat_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_volat_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.841 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.635 NA NA
d_volat_1 ~1 0.045 -0.016 0.106 0.144 1.452 0.146
volat_t1 ~1 1.599 1.523 1.674 3.825 41.336 0.000
d_volat_1 ~~ d_volat_1 0.099 0.019 0.178 0.994 2.440 0.015
volat_t1 ~~ d_volat_1 -0.016 -0.058 0.027 -0.123 -0.729 0.466
volat_t1 ~ frequ -0.131 -0.231 -0.032 -0.202 -2.591 0.010
d_volat_1 ~ frequ -0.039 -0.145 0.068 -0.079 -0.713 0.476
frequ ~~ frequ 0.412 0.267 0.557 1.000 5.568 0.000

The moderation effect of the frequency of self-improvement behaviors with the volatility change score (ideal-self) is significantly different from zero, b = -0.039, p = 0.476.

6.6.8.25 Curiosity - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8112.716 8200.646 0.954 0.041 0.052
# parameters of interest
params_lcs_curio_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", "d_curio_1 ~ sb07_13_t1", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.980 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.469 NA NA
d_curio_1 ~1 0.002 -0.075 0.080 0.016 0.058 0.954
curio_t1 ~1 4.592 4.489 4.695 15.562 87.584 0.000
d_curio_1 ~~ d_curio_1 0.020 -0.007 0.046 0.993 1.472 0.141
curio_t1 ~~ d_curio_1 -0.008 -0.025 0.010 -0.190 -0.878 0.380
d_curio_1 ~ sb07_13_t1 0.009 -0.022 0.040 0.084 0.569 0.569
sb07_13_t1 ~~ sb07_13_t1 1.720 1.527 1.912 1.000 17.527 0.000

The moderation effect of the facet-specific change goal with the curiosity change score (ideal-self) is not significantly different from zero, b = 0.009, p = 0.569.

6.6.8.26 Curiosity - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9247.911 9362.602 0.95 0.045 0.059
# parameters of interest
params_lcs_curio_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_curio_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.977 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.459 NA NA
d_curio_1 ~1 0.024 -0.019 0.066 0.165 1.101 0.271
curio_t1 ~1 4.536 4.465 4.607 14.808 125.815 0.000
d_curio_1 ~~ d_curio_1 0.019 -0.009 0.048 0.934 1.338 0.181
curio_t1 ~~ d_curio_1 -0.009 -0.028 0.010 -0.215 -0.943 0.346
curio_t1 ~ frequ 0.042 -0.064 0.148 0.086 0.772 0.440
d_curio_1 ~ frequ 0.059 -0.021 0.139 0.258 1.446 0.148
frequ ~~ frequ 0.397 0.258 0.535 1.000 5.607 0.000

The moderation effect of the frequency of self-improvement behaviors with the curiosity change score (ideal-self) is not significantly different from zero, b = 0.059, p = 0.148.

6.6.8.27 Aesthetic - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8276.038 8363.968 0.989 0.027 0.045
# parameters of interest
params_lcs_aesth_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", "d_aesth_1 ~ sb07_14_t1", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.985 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.540 NA NA
d_aesth_1 ~1 0.001 -0.004 0.007 0.087 0.407 0.684
aesth_t1 ~1 3.055 2.919 3.192 124.405 43.824 0.000
d_aesth_1 ~~ d_aesth_1 0.000 0.000 0.000 0.998 2.263 0.024
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.243 -1.334 0.182
d_aesth_1 ~ sb07_14_t1 0.000 -0.002 0.002 -0.045 -0.431 0.667
sb07_14_t1 ~~ sb07_14_t1 1.960 1.782 2.138 1.000 21.634 0.000

The moderation effect of the facet-specific change goal with the aesthetic change score (ideal-self) is not significantly different from zero, b = 0, p = 0.667.

6.6.8.28 Aesthetic - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9371.926 9486.617 0.981 0.033 0.051
# parameters of interest
params_lcs_aesth_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_aesth_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.986 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.540 NA NA
d_aesth_1 ~1 0.000 -0.002 0.002 -0.001 -0.006 0.995
aesth_t1 ~1 3.064 2.927 3.201 151.618 43.857 0.000
d_aesth_1 ~~ d_aesth_1 0.000 0.000 0.000 0.998 2.283 0.022
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.243 -1.396 0.163
aesth_t1 ~ frequ 0.007 0.002 0.011 0.207 2.739 0.006
d_aesth_1 ~ frequ -0.001 -0.005 0.003 -0.044 -0.401 0.688
frequ ~~ frequ 0.398 0.257 0.539 1.000 5.528 0.000

The moderation effect of the frequency of self-improvement behaviors with the aesthetic change score (ideal-self) is not significantly different from zero, b = -0.001, p = 0.688.

6.6.8.29 Imagination - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7480.097 7568.027 0.889 0.067 0.066
# parameters of interest
params_lcs_imagi_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", "d_imagi_1 ~ sb07_15_t1", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.068 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.740 NA NA
d_imagi_1 ~1 0.042 -0.075 0.159 0.160 0.704 0.481
imagi_t1 ~1 4.613 4.482 4.744 12.166 68.960 0.000
d_imagi_1 ~~ d_imagi_1 0.069 0.020 0.118 0.999 2.772 0.006
imagi_t1 ~~ d_imagi_1 -0.043 -0.082 -0.005 -0.435 -2.200 0.028
d_imagi_1 ~ sb07_15_t1 -0.007 -0.042 0.029 -0.036 -0.372 0.710
sb07_15_t1 ~~ sb07_15_t1 2.018 1.837 2.198 1.000 21.903 0.000

The moderation effect of the facet-specific change goal with the imagination change score (ideal-self) is not significantly different from zero, b = -0.007, p = 0.71.

6.6.8.30 Imagination - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 8555.027 8669.719 0.92 0.058 0.074
# parameters of interest
params_lcs_imagi_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_imagi_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.064 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.746 NA NA
d_imagi_1 ~1 0.020 -0.028 0.069 0.079 0.821 0.412
imagi_t1 ~1 4.612 4.550 4.673 12.468 146.635 0.000
d_imagi_1 ~~ d_imagi_1 0.067 0.020 0.114 1.000 2.795 0.005
imagi_t1 ~~ d_imagi_1 -0.042 -0.080 -0.004 -0.448 -2.140 0.032
imagi_t1 ~ frequ 0.126 0.031 0.221 0.216 2.609 0.009
d_imagi_1 ~ frequ 0.007 -0.100 0.114 0.017 0.124 0.901
frequ ~~ frequ 0.401 0.261 0.541 1.000 5.622 0.000

The moderation effect of the frequency of self-improvement behaviors with the imagination change score (ideal-self) is not significantly different from zero, b = 0.007, p = 0.901.

6.6.9 Hyp 6: Effects summary

6.6.9.1 Summary: Current self

Collect all relevant effects

Show the code
# create df for table:

# main effects (change score)
df_table_hyp6_main <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp6_mod <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp6 <- df_table_hyp6_main %>% left_join(df_table_hyp6_mod)

Results summary across the Big Five traits: trait-specific change goals (goals) and frequency of self-improvement behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion goals 0.098 0.335 0.000 0.067 0.173 0.209
extraversion frequency 0.096 0.333 0.001 0.123 0.265 0.005
agreeableness goals 0.020 0.100 0.261 0.031 0.139 0.205
agreeableness frequency 0.022 0.101 0.269 0.014 0.040 0.714
conscientiousness goals 0.106 0.256 0.000 0.032 0.093 0.195
conscientiousness frequency 0.103 0.252 0.000 0.047 0.072 0.398
neuroticism goals -0.179 -0.387 0.000 -0.070 -0.173 0.025
neuroticism frequency -0.180 -0.391 0.000 -0.038 -0.051 0.528
openness goals 0.080 0.299 0.001 0.007 0.020 0.839
openness frequency 0.077 0.291 0.001 0.045 0.106 0.288

No moderation effects that are significantly different from zero at p < .001. Only at p < .01 do we find a significant effect:

  • changes in current-level extraversion are moderated by the frequency of self-improvement behaviors

Results summary across the Big Five facets: trait-specific change goals (goals) and frequency of self-improvement behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability goals -0.021 -0.055 0.845 0.030 0.095 0.316
sociability frequency 0.073 0.193 0.046 0.215 0.359 0.000
assertiveness goals 0.112 0.405 0.068 -0.014 -0.066 0.462
assertiveness frequency 0.058 0.214 0.019 0.033 0.077 0.449
energy goals 0.095 0.629 0.015 -0.042 -0.348 0.002
energy frequency -0.058 -0.370 0.005 -0.068 -0.267 0.038
compassion goals -0.022 -0.088 0.721 0.047 0.259 0.050
compassion frequency 0.103 0.409 0.001 0.017 0.042 0.796
respectfulness goals -0.049 -0.158 0.367 0.031 0.133 0.207
respectfulness frequency 0.018 0.057 0.540 -0.104 -0.211 0.039
trust goals 0.029 0.091 0.701 -0.048 -0.205 0.099
trust frequency -0.091 -0.313 0.020 0.001 0.002 0.990
organization goals 0.084 0.171 0.367 -0.056 -0.170 0.049
organization frequency -0.088 -0.192 0.036 -0.029 -0.039 0.706
productiveness goals 0.042 0.070 0.756 -0.056 -0.126 0.106
productiveness frequency -0.162 -0.271 0.000 -0.119 -0.124 0.177
responsibility goals -0.006 -0.025 0.902 0.021 0.120 0.222
responsibility frequency 0.057 0.221 0.031 0.001 0.002 0.989
anxiety goals -0.158 -0.369 0.157 0.101 0.358 0.001
anxiety frequency 0.217 0.502 0.000 0.063 0.092 0.462
depression goals -0.011 -0.030 0.831 0.037 0.166 0.021
depression frequency 0.117 0.316 0.000 0.037 0.062 0.479
volatility goals -0.104 -0.183 0.258 -0.027 -0.069 0.407
volatility frequency -0.177 -0.313 0.000 0.044 0.049 0.631
curiosity goals -0.065 -0.334 0.171 0.044 0.296 0.024
curiosity frequency 0.037 0.196 0.129 0.114 0.373 0.011
aesthetic goals -0.011 -0.112 0.553 0.001 0.019 0.838
aesthetic frequency -0.007 -0.075 0.438 0.008 0.053 0.624
imagination goals 0.089 0.262 0.219 0.007 0.031 0.748
imagination frequency 0.110 0.317 0.001 0.070 0.126 0.268

Looking at the facets, we only find one moderator effect that significantly differ from zero (p < .001) and two other effects at p < .05:

  • Within extraversion, we find the effect for the frequency of self-improvement behaviors from above represented in the facet sociability, and at p < .05 in energy (but in the other, unexpected direction).
  • Within openness, change in the curiosity facet is moderated by the frequency of self-improvement behaviors (at p < .01).

Prepare data frame for plotting:

Show the code
df_table_hyp6_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp6_plot <- df_table_hyp6_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("current", levels = c("current"), labels = c("current"))) %>% 
  mutate(moderator = factor(moderator, levels = c("goals", "frequency"), labels = c("goals", "frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses (only showing the moderation effects):

  • current = current-level personality
  • goals = specific, facet-level change goal(s) as moderator
  • frequency = frequency of self-improvement behavior as moderator
Show the code
ggplot(df_table_hyp6_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.6.9.2 Summary: Ideal self

Run models for all facets with a template & loop:

Show the code
# create df for table:

# main effects (change score)
df_table_hyp6_ideal_main <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_ideal_frequ_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_ideal_specif_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_ideal_frequ_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_ideal_specif_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_ideal_frequ_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_ideal_specif_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_ideal_frequ_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_ideal_specif_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_ideal_frequ_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_ideal_specif_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_ideal_frequ_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_ideal_specif_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_ideal_frequ_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_ideal_specif_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_ideal_frequ_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_ideal_specif_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_ideal_frequ_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_ideal_specif_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_ideal_frequ_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_ideal_specif_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_ideal_frequ_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_ideal_specif_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_ideal_frequ_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_ideal_specif_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_ideal_frequ_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_ideal_specif_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_ideal_frequ_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_ideal_specif_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_ideal_frequ_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_ideal_specif_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_ideal_frequ_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_ideal_specif_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_ideal_frequ_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_ideal_specif_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_ideal_frequ_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_ideal_specif_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_ideal_frequ_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_ideal_specif_hyp6 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_ideal_frequ_hyp6 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp6_ideal_mod <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp6_ideal <- df_table_hyp6_ideal_main %>% left_join(df_table_hyp6_ideal_mod)

Results summary across the Big Five traits: trait-specific change goals (goals) and frequency of self-improvement behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6_ideal[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion goals -0.019 -0.080 0.388 0.029 0.071 0.691
extraversion frequency -0.019 -0.079 0.393 0.038 0.103 0.351
agreeableness goals -0.030 -0.111 0.178 0.014 0.048 0.657
agreeableness frequency -0.030 -0.112 0.175 -0.035 -0.084 0.427
conscientiousness goals 0.009 0.035 0.673 -0.031 -0.136 0.145
conscientiousness frequency 0.010 0.037 0.658 0.034 0.082 0.323
neuroticism goals 0.042 0.116 0.123 0.047 0.142 0.129
neuroticism frequency 0.042 0.114 0.127 -0.005 -0.008 0.931
openness goals 0.016 0.109 0.258 0.000 0.000 0.999
openness frequency 0.017 0.110 0.259 0.012 0.049 0.659

No significant moderation effects at the domain level.

Results summary across the Big Five facets: trait-specific change goals (goals) and frequency of self-improvement behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6_ideal[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability goals 0.145 0.536 0.113 -0.050 -0.235 0.043
sociability frequency -0.032 -0.115 0.277 0.061 0.140 0.297
assertiveness goals -0.013 -0.066 0.833 0.002 0.016 0.882
assertiveness frequency -0.004 -0.020 0.837 0.017 0.054 0.622
energy goals 0.005 0.040 0.906 0.009 0.096 0.406
energy frequency 0.040 0.330 0.034 -0.018 -0.095 0.546
compassion goals -0.151 -0.686 0.040 0.042 0.259 0.109
compassion frequency -0.042 -0.185 0.251 0.012 0.035 0.855
respectfulness goals 0.022 0.091 0.629 -0.009 -0.053 0.638
respectfulness frequency -0.001 -0.004 0.967 -0.049 -0.131 0.207
trust goals 0.106 0.814 0.050 -0.016 -0.167 0.370
trust frequency 0.062 0.482 0.007 0.033 0.163 0.459
organization goals -0.106 -0.375 0.197 0.027 0.143 0.234
organization frequency -0.021 -0.077 0.500 -0.067 -0.158 0.182
productiveness goals -0.097 -0.387 0.104 0.029 0.159 0.069
productiveness frequency 0.012 0.046 0.633 -0.034 -0.087 0.373
responsibility goals -0.002 -0.011 0.965 -0.001 -0.010 0.924
responsibility frequency -0.006 -0.030 0.757 -0.006 -0.021 0.858
anxiety goals 0.000 0.001 0.998 -0.006 -0.035 0.734
anxiety frequency -0.023 -0.086 0.367 -0.025 -0.060 0.583
depression goals 0.017 0.068 0.699 -0.011 -0.069 0.412
depression frequency -0.018 -0.072 0.374 -0.016 -0.040 0.640
volatility goals -0.029 -0.090 0.679 0.027 0.124 0.206
volatility frequency 0.045 0.144 0.146 -0.039 -0.079 0.476
curiosity goals 0.002 0.016 0.954 0.009 0.084 0.569
curiosity frequency 0.024 0.165 0.271 0.059 0.258 0.148
aesthetic goals 0.001 0.087 0.684 0.000 -0.045 0.667
aesthetic frequency 0.000 -0.001 0.995 -0.001 -0.044 0.688
imagination goals 0.042 0.160 0.481 -0.007 -0.036 0.710
imagination frequency 0.020 0.079 0.412 0.007 0.017 0.901

No significant moderation effects at the facet level (at p < .001).

Prepare data frame for plotting:

Show the code
df_table_hyp6_plot_ideal <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp6_plot_ideal <- df_table_hyp6_plot_ideal %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("ideal", levels = c("ideal"), labels = c("ideal"))) %>% 
  mutate(moderator = factor(moderator, levels = c("goals", "frequency"), labels = c("goals", "frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses (only showing the moderation effects):

  • ideal = ideal-level personality
  • goals = specific, facet-level change goal(s) as moderator
  • frequency = frequency of self-improvement behavior as moderator
Show the code
ggplot(df_table_hyp6_plot_ideal, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.7 H7: Desire to change and frequency of self-acceptance behaviors as moderators of change in personality in self-acceptance group

In the self-acceptance group, change in ideal-self ratings but not change in current-self ratings will be moderated by acceptance goals (both general and trait-/facet-specific goals) and the frequency of self-acceptance behaviors.

We will test this one domain/facet at a time. To test this hypothesis, we will estimate the mean-level difference across time for both current and ideal trait ratings using latent change models and specify acceptance goals (or the frequency of self-acceptance behaviors) as a moderator of latent trait change. We will check in a second set of models whether changes in ideal-self ratings persist from T2 to T3.

Reshape and split data set by intervention group:

Show the code
# from T! to T2
df_sbsa2_wide_pers_sa_mod <- df_sbsa2 %>% 
  filter(rando=="Self-Acceptance" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07", # facet-specific acceptance goals
                                  "sa04"))) %>% # frequency self-acceptance behaviors
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sa07", "sa04")))) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, 
            sa04_01_t1, sa04_02_t1, sa04_03_t1)) # frequency of self-acceptance behaviors measured at T2
# colnames(df_sbsa2_wide_pers_sa_mod)

group_assign <- df_sbsa2 %>% select(pid, rando) %>% unique()

df_sbsa2_wide_pers_sa_mod <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Acceptance") %>% select(-rando, -ends_with("_t3")) %>%
  left_join(df_sbsa2_wide_pers_sa_mod)

# follow-up, from T2 to T3
df_sbsa2_wide_pers_sa_mod_fu <- df_sbsa2 %>% 
  filter(rando=="Self-Acceptance" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07", # facet-specific change goals -> asked at T1
                                  "sa04"))) %>% # frequency self-improvement behaviors -> asked at T2
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sa07", "sa04")))) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, 
            sa04_01_t1, sa04_02_t1, sa04_03_t1)) # frequency of self-improvement behaviors measured at T2
# colnames(df_sbsa2_wide_pers_sa_mod_fu)

df_sbsa2_wide_pers_sa_mod_fu <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Acceptance" & !is.na(valid_t2)) %>% select(-rando, -ends_with("_t1")) %>%
  left_join(df_sbsa2_wide_pers_sa_mod_fu)

6.7.1 Big Five traits (run models)

Run models for all traits with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific acceptance goals

trait_template_mod_goal_accept <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ goals           # This estimates the moderation effect on personality at T1
d_trait_1 ~ goals          # This estimates the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

trait_facets_nrs <- list(a1 = c(1:3), b2 = c(4:6), c3 = c(7:9), d4 = c(10:12), e5 = c(13:15)) # matching facet nrs to traits 

# loop across 5 traits -> change in ideal self
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal (6 = ideal)
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  mod_names = paste0("sa07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3"),
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), trait_model_fit))
}  

# loop across 5 traits -> change in current self
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal (6 = ideal)
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  mod_names = paste0("sa07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), # current instead of ideal
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3"),
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp7")), template_filled)) # current instead of ideal
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp7")), trait_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for ideal self ratings)

trait_template_mod_goal_accept_fu <- '
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 
trait_t3 =~ 1*ind01_t3 + lamb2*ind02_t3 + lamb3*ind03_t3 # This specifies the measurement model for trait_t3 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t3 ~ 1*trait_t2     # This parameter regresses trait_t3 perfectly on trait_t2
d_trait_1 =~ 1*trait_t3   # This defines the latent change score factor as measured perfectly by scores on trait_t3
trait_t3 ~ 0*1            # This line constrains the intercept of trait_t3 to 0
trait_t3 ~~ 0*trait_t3    # This fixes the variance of trait_t3 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t2 ~ 1               # This estimates the intercept of trait_t2 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t2 ~~ trait_t2         # This estimates the variance of trait_t2 
trait_t2 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t2 ~ goals           # This estimates the moderation effect on personality at T2
d_trait_1 ~ goals          # This estimates the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t2 ~~ ind01_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind02_t2 ~~ ind02_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind03_t2 ~~ ind03_t3   # This allows residual covariance on indicator X3 across T2 and T3

ind01_t2 ~~ res1*ind01_t2   # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2   # This allows residual variance on indicator X2 at T2
ind03_t2 ~~ res3*ind03_t2   # This allows residual variance on indicator X3 at T2

ind01_t3 ~~ res1*ind01_t3  # This allows residual variance on indicator X1 at T3 
ind02_t3 ~~ res2*ind02_t3  # This allows residual variance on indicator X2 at T3 
ind03_t3 ~~ res3*ind03_t3  # This allows residual variance on indicator X3 at T3

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind01_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind02_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind03_t3 ~ m3*1     # This estimates the intercept of X3 at T3

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

# loop across 5 traits -> change in ideal self (from T2 to T3)
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal (6 = ideal)
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  mod_names = paste0("sa07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal_accept_fu, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3"),
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7_fu")), trait_model_fit))
}  

# 2nd, for frequency of self-acceptance behavior

trait_template_mod_frequ_accept <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for extra_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_trait_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 5 traits -> change in ideal self
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), template_filled)) 
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), trait_model_fit))
}  

# loop across 5 traits -> change in current self
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), # current instead of ideal
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp7")), template_filled)) # current instead of ideal
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp7")), trait_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for current self ratings)

trait_template_mod_frequ_accept_fu <- '
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 
trait_t3 =~ 1*ind01_t3 + lamb2*ind02_t3 + lamb3*ind03_t3 # This specifies the measurement model for extra_t3 with the equality constrained factor loadings

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

trait_t3 ~ 1*trait_t2     # This parameter regresses trait_t3 perfectly on trait_t2
d_trait_1 =~ 1*trait_t3   # This defines the latent change score factor as measured perfectly by scores on trait_t3
trait_t3 ~ 0*1            # This line constrains the intercept of trait_t3 to 0
trait_t3 ~~ 0*trait_t3    # This fixes the variance of trait_t3 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t2 ~ 1               # This estimates the intercept of trait_t2 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t2 ~~ trait_t2         # This estimates the variance of trait_t2 
trait_t2 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t2 ~ frequ           # This estimates the moderation effect on personality at T2
d_trait_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t2 ~~ ind01_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind02_t2 ~~ ind02_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind03_t2 ~~ ind03_t3   # This allows residual covariance on indicator X3 across T2 and T3

ind01_t2 ~~ res1*ind01_t2   # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2   # This allows residual variance on indicator X2 at T2
ind03_t2 ~~ res3*ind03_t2   # This allows residual variance on indicator X3 at T2

ind01_t3 ~~ res1*ind01_t3  # This allows residual variance on indicator X1 at T3 
ind02_t3 ~~ res2*ind02_t3  # This allows residual variance on indicator X2 at T3 
ind03_t3 ~~ res3*ind03_t3  # This allows residual variance on indicator X3 at T3

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind01_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind02_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind03_t3 ~ m3*1     # This estimates the intercept of X3 at T3

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 5 traits -> change in ideal self (from T2 to T3)
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ_accept_fu, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7_fu")), template_filled)) 
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7_fu")), trait_model_fit))
}  

6.7.2 Big Five traits (ideal self)

6.7.2.1 Extraversion: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 6351.424 6450.669 0.995 0.018 0.041
# parameters of interest
params_lcs_extra_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.984 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.636 NA NA
d_extra_1 ~1 -0.020 -0.069 0.030 -0.076 -0.776 0.438
extra_t1 ~1 3.689 3.625 3.753 9.175 113.322 0.000
d_extra_1 ~~ d_extra_1 0.067 0.026 0.108 0.989 3.211 0.001
extra_t1 ~~ d_extra_1 -0.030 -0.055 -0.005 -0.291 -2.370 0.018
extra_t1 ~ goals 0.047 -0.039 0.133 0.102 1.069 0.285
d_extra_1 ~ goals -0.031 -0.101 0.039 -0.103 -0.859 0.390
goals ~~ goals 0.757 0.374 1.140 1.000 3.874 0.000

The moderation effect of specific, facet-level acceptance goals with the extraversion change score (ideal-self) is not significantly different from zero, b = -0.031, p = 0.39.

6.7.2.2 Extraversion: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5346.201 5445.446 0.988 0.031 0.043
# parameters of interest
params_lcs_extra_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_extra_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.987 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.635 NA NA
d_extra_1 ~1 -0.019 -0.068 0.031 -0.072 -0.731 0.465
extra_t1 ~1 3.689 3.625 3.752 9.238 113.309 0.000
d_extra_1 ~~ d_extra_1 0.066 0.026 0.106 0.999 3.227 0.001
extra_t1 ~~ d_extra_1 -0.032 -0.056 -0.008 -0.325 -2.588 0.010
extra_t1 ~ frequ 0.163 0.067 0.259 0.303 3.336 0.001
d_extra_1 ~ frequ 0.009 -0.071 0.089 0.026 0.224 0.823
frequ ~~ frequ 0.549 0.370 0.728 1.000 6.023 0.000

The moderation effect of the frequency of self-acceptance behaviors with the extraversion change score (ideal-self) is not significantly different from zero, b = 0.009, p = 0.823.

6.7.2.3 Agreeableness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 6066.273 6165.518 0.989 0.038 0.04
# parameters of interest
params_lcs_agree_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.013 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.623 NA NA
d_agree_1 ~1 0.006 -0.038 0.049 0.021 0.259 0.795
agree_t1 ~1 3.778 3.705 3.851 8.422 101.648 0.000
d_agree_1 ~~ d_agree_1 0.076 0.043 0.109 0.998 4.472 0.000
agree_t1 ~~ d_agree_1 -0.041 -0.066 -0.016 -0.335 -3.264 0.001
agree_t1 ~ goals -0.050 -0.111 0.011 -0.106 -1.610 0.107
d_agree_1 ~ goals -0.012 -0.068 0.044 -0.040 -0.410 0.682
goals ~~ goals 0.895 0.578 1.212 1.000 5.539 0.000

The moderation effect of specific, facet-level acceptance goals with the agreeableness change score (ideal-self) is not significantly different from zero, b = -0.012, p = 0.682.

6.7.2.4 Agreeableness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5211.403 5310.648 0.993 0.029 0.036
# parameters of interest
params_lcs_agree_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_agree_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.012 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.622 NA NA
d_agree_1 ~1 0.006 -0.037 0.049 0.023 0.293 0.770
agree_t1 ~1 3.778 3.705 3.851 8.498 101.706 0.000
d_agree_1 ~~ d_agree_1 0.074 0.042 0.107 0.994 4.505 0.000
agree_t1 ~~ d_agree_1 -0.042 -0.067 -0.017 -0.357 -3.254 0.001
agree_t1 ~ frequ 0.148 0.056 0.240 0.245 3.163 0.002
d_agree_1 ~ frequ 0.029 -0.042 0.100 0.078 0.804 0.422
frequ ~~ frequ 0.542 0.362 0.721 1.000 5.908 0.000

The moderation effect of the frequency of self-acceptance behaviors with the agreeableness change score (ideal-self) is not significantly different from zero, b = 0.029, p = 0.422.

6.7.2.5 Conscientiousness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5703.585 5802.83 1 0 0.03
# parameters of interest
params_lcs_consc_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.034 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.741 NA NA
d_consc_1 ~1 0.026 -0.020 0.072 0.081 1.097 0.273
consc_t1 ~1 4.339 4.279 4.400 9.858 141.190 0.000
d_consc_1 ~~ d_consc_1 0.098 0.057 0.139 0.983 4.650 0.000
consc_t1 ~~ d_consc_1 -0.057 -0.085 -0.028 -0.412 -3.886 0.000
consc_t1 ~ goals -0.014 -0.067 0.040 -0.033 -0.504 0.615
d_consc_1 ~ goals -0.039 -0.088 0.010 -0.132 -1.563 0.118
goals ~~ goals 1.133 0.835 1.431 1.000 7.460 0.000

The moderation effect of specific, facet-level acceptance goals with the conscientiousness change score (ideal-self) is not significantly different from zero, b = -0.039, p = 0.118.

6.7.2.6 Conscientiousness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 4797.333 4896.578 0.992 0.031 0.029
# parameters of interest
params_lcs_consc_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_consc_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.034 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.740 NA NA
d_consc_1 ~1 0.027 -0.019 0.073 0.085 1.156 0.248
consc_t1 ~1 4.339 4.279 4.400 9.838 141.177 0.000
d_consc_1 ~~ d_consc_1 0.098 0.057 0.139 0.983 4.667 0.000
consc_t1 ~~ d_consc_1 -0.059 -0.087 -0.030 -0.431 -4.059 0.000
consc_t1 ~ frequ 0.089 -0.008 0.186 0.148 1.801 0.072
d_consc_1 ~ frequ 0.057 -0.013 0.126 0.131 1.595 0.111
frequ ~~ frequ 0.537 0.358 0.716 1.000 5.879 0.000

The frequency of self-acceptance behaviors significantly moderates changes in conscientiousness (ideal-self), b = 0.057, p = 0.111.

6.7.2.7 Neuroticism: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5929.674 6028.919 0.99 0.034 0.045
# parameters of interest
params_lcs_neuro_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.066 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.699 NA NA
d_neuro_1 ~1 -0.007 -0.062 0.049 -0.019 -0.231 0.817
neuro_t1 ~1 1.751 1.685 1.818 3.280 51.766 0.000
d_neuro_1 ~~ d_neuro_1 0.122 0.063 0.181 0.999 4.048 0.000
neuro_t1 ~~ d_neuro_1 -0.078 -0.125 -0.031 -0.419 -3.240 0.001
neuro_t1 ~ goals 0.035 -0.034 0.104 0.064 0.995 0.320
d_neuro_1 ~ goals -0.010 -0.068 0.049 -0.027 -0.330 0.741
goals ~~ goals 0.949 0.631 1.267 1.000 5.852 0.000

The moderation effect of specific, facet-level acceptance goals with the neuroticism change score (ideal-self) is not significantly different from zero, b = -0.01, p = 0.741.

6.7.2.8 Neuroticism: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5014.139 5113.384 0.997 0.019 0.036
# parameters of interest
params_lcs_neuro_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_neuro_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.065 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.698 NA NA
d_neuro_1 ~1 -0.006 -0.062 0.050 -0.018 -0.227 0.821
neuro_t1 ~1 1.751 1.685 1.818 3.263 51.737 0.000
d_neuro_1 ~~ d_neuro_1 0.123 0.064 0.183 0.997 4.060 0.000
neuro_t1 ~~ d_neuro_1 -0.077 -0.123 -0.031 -0.416 -3.268 0.001
neuro_t1 ~ frequ -0.151 -0.264 -0.039 -0.209 -2.644 0.008
d_neuro_1 ~ frequ 0.027 -0.066 0.119 0.057 0.570 0.569
frequ ~~ frequ 0.546 0.366 0.727 1.000 5.940 0.000

The moderation effect of the frequency of self-acceptance behaviors with the neuroticism change score (ideal-self) is not significantly different from zero, b = 0.027, p = 0.569.

6.7.2.9 Openness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5972.654 6071.899 0.989 0.037 0.033
# parameters of interest
params_lcs_openn_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.048 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.730 NA NA
d_openn_1 ~1 0.014 -0.018 0.047 0.068 0.876 0.381
openn_t1 ~1 3.907 3.848 3.966 12.686 130.383 0.000
d_openn_1 ~~ d_openn_1 0.046 0.020 0.072 0.995 3.427 0.001
openn_t1 ~~ d_openn_1 -0.025 -0.042 -0.009 -0.416 -3.024 0.002
openn_t1 ~ goals -0.147 -0.207 -0.088 -0.370 -4.840 0.000
d_openn_1 ~ goals 0.020 -0.022 0.062 0.073 0.946 0.344
goals ~~ goals 0.599 0.384 0.814 1.000 5.457 0.000

The moderation effect of specific, facet-level acceptance goals with the openness change score (ideal-self) is not significantly different from zero, b = 0.02, p = 0.344.

6.7.2.10 Openness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5289.278 5388.523 0.991 0.03 0.038
# parameters of interest
params_lcs_openn_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_openn_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.047 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.731 NA NA
d_openn_1 ~1 0.015 -0.018 0.048 0.069 0.901 0.368
openn_t1 ~1 3.907 3.848 3.966 12.636 130.274 0.000
d_openn_1 ~~ d_openn_1 0.047 0.020 0.073 0.999 3.444 0.001
openn_t1 ~~ d_openn_1 -0.028 -0.046 -0.009 -0.421 -2.975 0.003
openn_t1 ~ frequ 0.060 -0.003 0.122 0.142 1.878 0.060
d_openn_1 ~ frequ 0.009 -0.042 0.061 0.032 0.362 0.717
frequ ~~ frequ 0.545 0.366 0.723 1.000 5.968 0.000

The moderation effect of frequency of self-acceptance behaviors with the openness change score (ideal-self) is not significantly different from zero, b = 0.009, p = 0.717.

6.7.3 Big Five traits (ideal self - follow-up at T3)

6.7.3.1 Extraversion: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 5406.123 5500.996 1 0 0.035
# parameters of interest
params_lcs_extra_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t3 ~ extra_t2", "d_extra_1 =~ extra_t3", "extra_t2 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t2 ~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t2 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t3 ~ extra_t2 1.000 1.000 1.000 1.033 NA NA
d_extra_1 =~ extra_t3 1.000 1.000 1.000 0.539 NA NA
d_extra_1 ~1 -0.007 -0.053 0.039 -0.032 -0.292 0.770
extra_t2 ~1 3.650 3.577 3.724 8.950 97.362 0.000
d_extra_1 ~~ d_extra_1 0.045 0.013 0.076 0.983 2.791 0.005
extra_t2 ~~ d_extra_1 -0.028 -0.057 0.000 -0.328 -1.940 0.052
extra_t2 ~ goals 0.015 -0.073 0.102 0.031 0.326 0.744
d_extra_1 ~ goals 0.033 -0.044 0.109 0.132 0.836 0.403
goals ~~ goals 0.745 0.329 1.161 1.000 3.508 0.000

The moderation effect of specific, facet-level acceptance goals with the extraversion change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.033, p = 0.403.

6.7.3.2 Extraversion: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4903.142 4998.016 0.994 0.023 0.039
# parameters of interest
params_lcs_extra_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_extra_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t3 ~ extra_t2", "d_extra_1 =~ extra_t3", "extra_t2 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t2 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t2 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t3 ~ extra_t2 1.000 1.000 1.000 1.030 NA NA
d_extra_1 =~ extra_t3 1.000 1.000 1.000 0.542 NA NA
d_extra_1 ~1 -0.007 -0.053 0.038 -0.035 -0.321 0.749
extra_t2 ~1 3.650 3.577 3.724 9.117 97.559 0.000
d_extra_1 ~~ d_extra_1 0.044 0.013 0.075 0.993 2.819 0.005
extra_t2 ~~ d_extra_1 -0.025 -0.051 0.002 -0.308 -1.813 0.070
extra_t2 ~ frequ 0.171 0.076 0.266 0.314 3.518 0.000
d_extra_1 ~ frequ -0.024 -0.093 0.045 -0.083 -0.675 0.500
frequ ~~ frequ 0.542 0.365 0.720 1.000 5.999 0.000

The moderation effect of the frequency of self-acceptance behaviors with the extraversion change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.024, p = 0.5.

6.7.3.3 Agreeableness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 5014.761 5109.635 0.997 0.022 0.037
# parameters of interest
params_lcs_agree_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t3 ~ agree_t2", "d_agree_1 =~ agree_t3", "agree_t2 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t2 ~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t2 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t3 ~ agree_t2 1.000 1.000 1.000 1.026 NA NA
d_agree_1 =~ agree_t3 1.000 1.000 1.000 0.480 NA NA
d_agree_1 ~1 -0.001 -0.042 0.040 -0.005 -0.058 0.954
agree_t2 ~1 3.814 3.736 3.892 8.043 96.133 0.000
d_agree_1 ~~ d_agree_1 0.049 0.015 0.083 0.989 2.808 0.005
agree_t2 ~~ d_agree_1 -0.028 -0.052 -0.005 -0.274 -2.359 0.018
agree_t2 ~ goals -0.088 -0.161 -0.014 -0.176 -2.337 0.019
d_agree_1 ~ goals 0.024 -0.023 0.072 0.104 0.998 0.318
goals ~~ goals 0.904 0.560 1.247 1.000 5.155 0.000

The moderation effect of specific, facet-level acceptance goals with the agreeableness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.024, p = 0.318.

6.7.3.4 Agreeableness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4670.112 4764.986 0.995 0.027 0.036
# parameters of interest
params_lcs_agree_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_agree_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t3 ~ agree_t2", "d_agree_1 =~ agree_t3", "agree_t2 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t2 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t2 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t3 ~ agree_t2 1.000 1.000 1.000 1.026 NA NA
d_agree_1 =~ agree_t3 1.000 1.000 1.000 0.481 NA NA
d_agree_1 ~1 -0.002 -0.042 0.039 -0.007 -0.074 0.941
agree_t2 ~1 3.814 3.736 3.892 8.124 96.192 0.000
d_agree_1 ~~ d_agree_1 0.046 0.014 0.078 0.954 2.791 0.005
agree_t2 ~~ d_agree_1 -0.023 -0.046 0.000 -0.241 -2.002 0.045
agree_t2 ~ frequ 0.183 0.094 0.273 0.287 4.018 0.000
d_agree_1 ~ frequ -0.064 -0.128 -0.001 -0.215 -1.993 0.046
frequ ~~ frequ 0.541 0.362 0.720 1.000 5.933 0.000

The moderation effect of the frequency of self-acceptance behaviors with the agreeableness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.064, p = 0.046.

6.7.3.5 Conscientiousness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4711.962 4806.835 0.978 0.056 0.038
# parameters of interest
params_lcs_consc_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t3 ~ consc_t2", "d_consc_1 =~ consc_t3", "consc_t2 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t2 ~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t2 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t3 ~ consc_t2 1.000 1.000 1.000 0.942 NA NA
d_consc_1 =~ consc_t3 1.000 1.000 1.000 0.476 NA NA
d_consc_1 ~1 -0.014 -0.056 0.029 -0.059 -0.629 0.529
consc_t2 ~1 4.365 4.297 4.433 9.629 126.254 0.000
d_consc_1 ~~ d_consc_1 0.052 0.020 0.085 0.999 3.187 0.001
consc_t2 ~~ d_consc_1 -0.013 -0.039 0.013 -0.125 -0.961 0.337
consc_t2 ~ goals -0.056 -0.115 0.003 -0.131 -1.850 0.064
d_consc_1 ~ goals 0.005 -0.043 0.054 0.025 0.220 0.826
goals ~~ goals 1.122 0.799 1.446 1.000 6.797 0.000

The moderation effect of specific, facet-level acceptance goals with the conscientiousness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.005, p = 0.826.

6.7.3.6 Conscientiousness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4295.346 4390.219 0.973 0.062 0.039
# parameters of interest
params_lcs_consc_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_consc_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t3 ~ consc_t2", "d_consc_1 =~ consc_t3", "consc_t2 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t2 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t2 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t3 ~ consc_t2 1.000 1.000 1.000 0.940 NA NA
d_consc_1 =~ consc_t3 1.000 1.000 1.000 0.474 NA NA
d_consc_1 ~1 -0.015 -0.057 0.028 -0.064 -0.674 0.500
consc_t2 ~1 4.365 4.297 4.433 9.605 126.263 0.000
d_consc_1 ~~ d_consc_1 0.049 0.018 0.080 0.939 3.113 0.002
consc_t2 ~~ d_consc_1 -0.006 -0.033 0.021 -0.062 -0.441 0.659
consc_t2 ~ frequ 0.158 0.059 0.258 0.255 3.110 0.002
d_consc_1 ~ frequ -0.077 -0.144 -0.010 -0.247 -2.256 0.024
frequ ~~ frequ 0.536 0.358 0.715 1.000 5.897 0.000

The moderation effect of the frequency of self-acceptance behaviors with the conscientiousness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.077, p = 0.024.

6.7.3.7 Neuroticism: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 5022.118 5116.991 0.993 0.028 0.034
# parameters of interest
params_lcs_neuro_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t3 ~ neuro_t2", "d_neuro_1 =~ neuro_t3", "neuro_t2 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t2 ~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t2 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t3 ~ neuro_t2 1.000 1.000 1.000 0.992 NA NA
d_neuro_1 =~ neuro_t3 1.000 1.000 1.000 0.476 NA NA
d_neuro_1 ~1 0.023 -0.027 0.073 0.097 0.896 0.370
neuro_t2 ~1 1.747 1.676 1.819 3.531 48.088 0.000
d_neuro_1 ~~ d_neuro_1 0.056 0.011 0.101 1.000 2.452 0.014
neuro_t2 ~~ d_neuro_1 -0.026 -0.059 0.006 -0.224 -1.588 0.112
neuro_t2 ~ goals 0.027 -0.041 0.095 0.050 0.769 0.442
d_neuro_1 ~ goals 0.004 -0.051 0.058 0.014 0.128 0.898
goals ~~ goals 0.865 0.521 1.209 1.000 4.931 0.000

The moderation effect of specific, facet-level acceptance goals with the neuroticism change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.004, p = 0.898.

6.7.3.8 Neuroticism: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4600.913 4695.786 0.992 0.03 0.032
# parameters of interest
params_lcs_neuro_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_neuro_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t3 ~ neuro_t2", "d_neuro_1 =~ neuro_t3", "neuro_t2 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t2 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t2 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t3 ~ neuro_t2 1.000 1.000 1.000 0.991 NA NA
d_neuro_1 =~ neuro_t3 1.000 1.000 1.000 0.476 NA NA
d_neuro_1 ~1 0.024 -0.027 0.075 0.101 0.926 0.354
neuro_t2 ~1 1.747 1.676 1.819 3.514 48.024 0.000
d_neuro_1 ~~ d_neuro_1 0.053 0.008 0.098 0.926 2.307 0.021
neuro_t2 ~~ d_neuro_1 -0.021 -0.053 0.011 -0.184 -1.265 0.206
neuro_t2 ~ frequ -0.118 -0.215 -0.021 -0.174 -2.377 0.017
d_neuro_1 ~ frequ 0.088 0.011 0.166 0.272 2.237 0.025
frequ ~~ frequ 0.539 0.361 0.716 1.000 5.941 0.000

The moderation effect of the frequency of self-acceptance behaviors with the neuroticism change score from T2 to T3 (ideal-self) is not significantly different from zero (at p < .001), b = 0.088, p = 0.025.

6.7.3.9 Openness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 5101.72 5196.593 1 0 0.027
# parameters of interest
params_lcs_openn_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t3 ~ openn_t2", "d_openn_1 =~ openn_t3", "openn_t2 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t2 ~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t2 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t3 ~ openn_t2 1.000 1.000 1.000 0.948 NA NA
d_openn_1 =~ openn_t3 1.000 1.000 1.000 0.565 NA NA
d_openn_1 ~1 0.005 -0.025 0.034 0.030 0.316 0.752
openn_t2 ~1 3.856 3.795 3.918 14.493 122.448 0.000
d_openn_1 ~~ d_openn_1 0.025 0.007 0.043 1.000 2.786 0.005
openn_t2 ~~ d_openn_1 -0.009 -0.020 0.003 -0.215 -1.401 0.161
openn_t2 ~ goals -0.118 -0.169 -0.066 -0.343 -4.497 0.000
d_openn_1 ~ goals 0.001 -0.037 0.039 0.004 0.044 0.965
goals ~~ goals 0.602 0.365 0.840 1.000 4.971 0.000

The moderation effect of specific, facet-level acceptance goals with the openness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.001, p = 0.965.

6.7.3.10 Openness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4867.833 4962.706 1 0.005 0.035
# parameters of interest
params_lcs_openn_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_openn_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t3 ~ openn_t2", "d_openn_1 =~ openn_t3", "openn_t2 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t2 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t2 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t3 ~ openn_t2 1.000 1.000 1.000 0.949 NA NA
d_openn_1 =~ openn_t3 1.000 1.000 1.000 0.569 NA NA
d_openn_1 ~1 0.005 -0.025 0.035 0.030 0.313 0.755
openn_t2 ~1 3.856 3.795 3.918 14.314 122.309 0.000
d_openn_1 ~~ d_openn_1 0.026 0.008 0.044 1.000 2.794 0.005
openn_t2 ~~ d_openn_1 -0.009 -0.022 0.004 -0.214 -1.367 0.172
openn_t2 ~ frequ 0.065 0.012 0.119 0.179 2.389 0.017
d_openn_1 ~ frequ 0.003 -0.039 0.046 0.014 0.143 0.886
frequ ~~ frequ 0.544 0.366 0.723 1.000 5.981 0.000

The moderation effect of frequency of self-acceptance behaviors with the openness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.003, p = 0.886.

6.7.4 Big Five traits (current self)

6.7.4.1 Extraversion: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 6803.171 6902.416 0.974 0.062 0.043
# parameters of interest
params_lcs_extra_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.027 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.451 NA NA
d_extra_1 ~1 0.092 0.047 0.137 0.345 4.018 0.000
extra_t1 ~1 3.030 2.942 3.118 4.972 67.579 0.000
d_extra_1 ~~ d_extra_1 0.070 0.035 0.106 0.981 3.915 0.000
extra_t1 ~~ d_extra_1 -0.031 -0.057 -0.006 -0.248 -2.430 0.015
extra_t1 ~ goals -0.390 -0.524 -0.256 -0.620 -5.703 0.000
d_extra_1 ~ goals 0.038 -0.026 0.103 0.139 1.166 0.244
goals ~~ goals 0.938 0.600 1.277 1.000 5.431 0.000

The moderation effect of specific, facet-level acceptance goals with the extraversion change score (current-self) is not significantly different from zero, b = 0.038, p = 0.244.

6.7.4.2 Extraversion: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5889.596 5988.841 0.994 0.03 0.034
# parameters of interest
params_lcs_extra_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_extra_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.026 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.450 NA NA
d_extra_1 ~1 0.089 0.045 0.133 0.342 3.955 0.000
extra_t1 ~1 3.032 2.944 3.119 5.096 67.775 0.000
d_extra_1 ~~ d_extra_1 0.067 0.034 0.101 0.988 3.931 0.000
extra_t1 ~~ d_extra_1 -0.044 -0.072 -0.016 -0.287 -3.098 0.002
extra_t1 ~ frequ 0.063 -0.069 0.195 0.078 0.938 0.348
d_extra_1 ~ frequ 0.038 -0.036 0.112 0.108 1.014 0.310
frequ ~~ frequ 0.540 0.361 0.720 1.000 5.893 0.000

The moderation effect of the frequency of self-acceptance behaviors with the extraversion change score (current-self) is not significantly different from zero, b = 0.038, p = 0.31.

6.7.4.3 Agreeableness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 6043.077 6142.322 0.988 0.037 0.029
# parameters of interest
params_lcs_agree_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.967 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.524 NA NA
d_agree_1 ~1 0.024 -0.011 0.059 0.120 1.357 0.175
agree_t1 ~1 3.462 3.398 3.525 9.309 107.614 0.000
d_agree_1 ~~ d_agree_1 0.039 0.012 0.067 0.973 2.792 0.005
agree_t1 ~~ d_agree_1 -0.019 -0.038 0.000 -0.272 -2.011 0.044
agree_t1 ~ goals -0.115 -0.178 -0.052 -0.298 -3.580 0.000
d_agree_1 ~ goals -0.034 -0.081 0.013 -0.163 -1.425 0.154
goals ~~ goals 0.932 0.655 1.209 1.000 6.591 0.000

The moderation effect of specific, facet-level acceptance goals with the agreeableness change score (current-self) is not significantly different from zero, b = -0.034, p = 0.154.

6.7.4.4 Agreeableness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5232.872 5332.117 0.995 0.024 0.041
# parameters of interest
params_lcs_agree_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_agree_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.963 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.522 NA NA
d_agree_1 ~1 0.027 -0.009 0.062 0.129 1.463 0.144
agree_t1 ~1 3.461 3.398 3.524 9.130 107.741 0.000
d_agree_1 ~~ d_agree_1 0.042 0.009 0.074 0.988 2.523 0.012
agree_t1 ~~ d_agree_1 -0.016 -0.034 0.002 -0.211 -1.752 0.080
agree_t1 ~ frequ 0.047 -0.036 0.129 0.090 1.112 0.266
d_agree_1 ~ frequ 0.030 -0.030 0.090 0.109 0.992 0.321
frequ ~~ frequ 0.539 0.362 0.717 1.000 5.949 0.000

The moderation effect of the frequency of self-acceptance behaviors with the agreeableness change score (current-self) is not significantly different from zero, b = 0.03, p = 0.321.

6.7.4.5 Conscientiousness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 6265.051 6364.296 0.98 0.064 0.028
# parameters of interest
params_lcs_consc_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.983 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.512 NA NA
d_consc_1 ~1 0.074 0.024 0.124 0.212 2.878 0.004
consc_t1 ~1 3.380 3.299 3.461 5.053 81.588 0.000
d_consc_1 ~~ d_consc_1 0.120 0.080 0.160 0.992 5.874 0.000
consc_t1 ~~ d_consc_1 -0.039 -0.069 -0.009 -0.220 -2.543 0.011
consc_t1 ~ goals -0.388 -0.471 -0.305 -0.644 -9.162 0.000
d_consc_1 ~ goals 0.029 -0.021 0.078 0.092 1.143 0.253
goals ~~ goals 1.232 0.954 1.510 1.000 8.696 0.000

The moderation effect of specific, facet-level acceptance goals with the conscientiousness change score (current-self) is not significantly different from zero, b = 0.029, p = 0.253.

6.7.4.6 Conscientiousness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5479.454 5578.699 0.998 0.018 0.03
# parameters of interest
params_lcs_consc_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_consc_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.984 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.512 NA NA
d_consc_1 ~1 0.074 0.024 0.125 0.213 2.886 0.004
consc_t1 ~1 3.380 3.299 3.461 5.054 81.596 0.000
d_consc_1 ~~ d_consc_1 0.121 0.079 0.162 0.997 5.702 0.000
consc_t1 ~~ d_consc_1 -0.055 -0.087 -0.023 -0.239 -3.356 0.001
consc_t1 ~ frequ 0.128 -0.016 0.272 0.141 1.743 0.081
d_consc_1 ~ frequ 0.027 -0.048 0.102 0.057 0.709 0.478
frequ ~~ frequ 0.539 0.359 0.719 1.000 5.879 0.000

The frequency of self-acceptance behaviors significantly moderates changes in conscientiousness (current-self), b = 0.027, p = 0.478.

6.7.4.7 Neuroticism: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 6521.254 6620.499 0.992 0.042 0.029
# parameters of interest
params_lcs_neuro_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.990 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.462 NA NA
d_neuro_1 ~1 -0.176 -0.231 -0.122 -0.474 -6.338 0.000
neuro_t1 ~1 3.250 3.157 3.342 4.077 68.940 0.000
d_neuro_1 ~~ d_neuro_1 0.138 0.093 0.184 1.000 5.905 0.000
neuro_t1 ~~ d_neuro_1 -0.060 -0.101 -0.020 -0.237 -2.921 0.003
neuro_t1 ~ goals 0.410 0.301 0.519 0.517 7.384 0.000
d_neuro_1 ~ goals -0.007 -0.066 0.053 -0.018 -0.222 0.824
goals ~~ goals 1.009 0.733 1.285 1.000 7.172 0.000

The moderation effect of specific, facet-level acceptance goals with the neuroticism change score (current-self) is not significantly different from zero, b = -0.007, p = 0.824.

6.7.4.8 Neuroticism: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5686.154 5785.398 1 0 0.04
# parameters of interest
params_lcs_neuro_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_neuro_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.990 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.463 NA NA
d_neuro_1 ~1 -0.176 -0.231 -0.121 -0.472 -6.296 0.000
neuro_t1 ~1 3.250 3.158 3.342 4.066 68.947 0.000
d_neuro_1 ~~ d_neuro_1 0.133 0.087 0.179 0.951 5.663 0.000
neuro_t1 ~~ d_neuro_1 -0.057 -0.099 -0.015 -0.197 -2.676 0.007
neuro_t1 ~ frequ 0.107 -0.036 0.251 0.100 1.466 0.143
d_neuro_1 ~ frequ -0.111 -0.202 -0.019 -0.221 -2.369 0.018
frequ ~~ frequ 0.554 0.373 0.735 1.000 5.993 0.000

The moderation effect of the frequency of self-acceptance behaviors with the neuroticism change score (current-self) is not significantly different from zero (at p < .001), b = -0.111, p = 0.018.

6.7.4.9 Openness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 6027.912 6127.157 0.993 0.037 0.032
# parameters of interest
params_lcs_openn_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.021 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.408 NA NA
d_openn_1 ~1 0.075 0.032 0.118 0.317 3.447 0.001
openn_t1 ~1 3.565 3.490 3.640 6.028 93.319 0.000
d_openn_1 ~~ d_openn_1 0.055 0.025 0.085 0.983 3.549 0.000
openn_t1 ~~ d_openn_1 -0.026 -0.050 -0.001 -0.217 -2.050 0.040
openn_t1 ~ goals -0.396 -0.502 -0.290 -0.524 -7.339 0.000
d_openn_1 ~ goals 0.039 -0.021 0.100 0.130 1.278 0.201
goals ~~ goals 0.611 0.396 0.826 1.000 5.579 0.000

The moderation effect of specific, facet-level acceptance goals with the openness change score (current-self) is not significantly different from zero, b = 0.039, p = 0.201.

6.7.4.10 Openness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5378.535 5477.78 0.995 0.029 0.035
# parameters of interest
params_lcs_openn_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_openn_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.021 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.407 NA NA
d_openn_1 ~1 0.076 0.033 0.119 0.317 3.454 0.001
openn_t1 ~1 3.564 3.490 3.639 5.955 93.281 0.000
d_openn_1 ~~ d_openn_1 0.055 0.026 0.085 0.972 3.648 0.000
openn_t1 ~~ d_openn_1 -0.040 -0.066 -0.014 -0.287 -3.041 0.002
openn_t1 ~ frequ 0.142 0.034 0.249 0.173 2.576 0.010
d_openn_1 ~ frequ 0.055 -0.025 0.135 0.168 1.344 0.179
frequ ~~ frequ 0.533 0.354 0.711 1.000 5.851 0.000

The moderation effect of frequency of self-acceptance behaviors with the openness change score (current-self) is not significantly different from zero, b = 0.055, p = 0.179.

6.7.5 Big Five facets (run models)

Run models for all facets with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific acceptance goal

facet_template_mod_goal_accept <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ ind_goal        # This estimates the moderation effect on personality at T1
d_facet_1 ~ ind_goal       # This estimates the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets -> changes in ideal self
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  mod_name = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), facet_model_fit))
}  

# loop across 15 facets -> changes in current self
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[5]], item_nrs) # current instead of ideal!
  mod_name = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp7")), template_filled)) # current instead of ideal!
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp7")), facet_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for ideal self ratings)

facet_template_mod_goal_accept_fu <- '
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2
facet_t3 =~ 1*ind1_t3 + lamb2*ind2_t3 + lamb3*ind3_t3 + lamb4*ind4_t3 # This specifies the measurement model for facet at T3 (with equality constraints)

facet_t3 ~ 1*facet_t2     # This parameter regresses facet_t3 perfectly on facet_t2
d_facet_1 =~ 1*facet_t3   # This defines the latent change score factor as measured perfectly by scores on facet_t3
facet_t3 ~ 0*1            # This line constrains the intercept of facet_t3 to 0
facet_t3 ~~ 0*facet_t3    # This fixes the variance of facet_t3 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t2 ~ 1               # This estimates the intercept of facet_t2 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t2 ~~ facet_t2         # This estimates the variance of facet_t2 
facet_t2 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t2 ~ ind_goal        # This estimates the moderation effect on personality at T2
d_facet_1 ~ ind_goal       # This estimates the moderation effect on the change score

ind1_t2 ~~ ind1_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind2_t2 ~~ ind2_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind3_t2 ~~ ind3_t3   # This allows residual covariance on indicator X3 across T2 and T3
ind4_t2 ~~ ind4_t3   # This allows residual covariance on indicator X4 across T2 and T3

ind1_t2 ~~ res1*ind1_t2   # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2   # This allows residual variance on indicator X2 at T2
ind3_t2 ~~ res3*ind3_t2   # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2   # This allows residual variance on indicator X4 at T2

ind1_t3 ~~ res1*ind1_t3  # This allows residual variance on indicator X1 at T3 
ind2_t3 ~~ res2*ind2_t3  # This allows residual variance on indicator X2 at T3 
ind3_t3 ~~ res3*ind3_t3  # This allows residual variance on indicator X3 at T3
ind4_t3 ~~ res4*ind4_t3  # This allows residual variance on indicator X4 at T3

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind2_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind3_t3 ~ m3*1     # This estimates the intercept of X3 at T3
ind4_t3 ~ m4*1     # This estimates the intercept of X4 at T3

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets -> changes in ideal self (from T2 to T3)
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  mod_name = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal_accept_fu, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7_fu")), facet_model_fit))
}  

# 2nd, for frequency of self-acceptance behavior

facet_template_mod_frequ_accept <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_facet_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 15 facets -> changes in ideal self
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), facet_model_fit))
}  

# loop across 15 facets -> changes in current self
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[5]], item_nrs) # current instead of ideal!
  template_filled <- str_replace_all(facet_template_mod_frequ_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp7")), template_filled)) # current instead of ideal!
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp7")), facet_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for ideal self ratings)

facet_template_mod_frequ_accept_fu <- '
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2
facet_t3 =~ 1*ind1_t3 + lamb2*ind2_t3 + lamb3*ind3_t3 + lamb4*ind4_t3 # This specifies the measurement model for facet at T3 (with equality constraints)

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

facet_t3 ~ 1*facet_t2     # This parameter regresses facet_t3 perfectly on facet_t2
d_facet_1 =~ 1*facet_t3   # This defines the latent change score factor as measured perfectly by scores on facet_t3
facet_t3 ~ 0*1            # This line constrains the intercept of facet_t3 to 0
facet_t3 ~~ 0*facet_t3    # This fixes the variance of facet_t3 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t2 ~ 1               # This estimates the intercept of facet_t2 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t2 ~~ facet_t2         # This estimates the variance of facet_t2 
facet_t2 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t2 ~ frequ           # This estimates the moderation effect on personality at T2
d_facet_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t2 ~~ ind1_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind2_t2 ~~ ind2_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind3_t2 ~~ ind3_t3   # This allows residual covariance on indicator X3 across T2 and T3
ind4_t2 ~~ ind4_t3   # This allows residual covariance on indicator X4 across T2 and T3

ind1_t2 ~~ res1*ind1_t2   # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2   # This allows residual variance on indicator X2 at T2
ind3_t2 ~~ res3*ind3_t2   # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2   # This allows residual variance on indicator X4 at T2

ind1_t3 ~~ res1*ind1_t3  # This allows residual variance on indicator X1 at T3 
ind2_t3 ~~ res2*ind2_t3  # This allows residual variance on indicator X2 at T3 
ind3_t3 ~~ res3*ind3_t3  # This allows residual variance on indicator X3 at T3
ind4_t3 ~~ res4*ind4_t3  # This allows residual variance on indicator X4 at T3

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind2_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind3_t3 ~ m3*1     # This estimates the intercept of X3 at T3
ind4_t3 ~ m4*1     # This estimates the intercept of X4 at T3

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 15 facets -> changes in ideal self
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ_accept_fu, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7_fu")), facet_model_fit))
} 

6.7.6 Big Five facets (ideal self)

6.7.6.1 Sociability - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 8062.214 8150.007 0.933 0.048 0.055
# parameters of interest
params_lcs_socia_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", "d_socia_1 ~ sa07_01_t1", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.894 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.483 NA NA
d_socia_1 ~1 0.101 -0.059 0.261 0.532 1.243 0.214
socia_t1 ~1 4.078 3.886 4.271 11.548 41.478 0.000
d_socia_1 ~~ d_socia_1 0.032 -0.024 0.089 0.884 1.115 0.265
socia_t1 ~~ d_socia_1 0.001 -0.030 0.033 0.020 0.077 0.939
d_socia_1 ~ sa07_01_t1 -0.048 -0.093 -0.004 -0.341 -2.120 0.034
sa07_01_t1 ~~ sa07_01_t1 1.826 1.634 2.019 1.000 18.622 0.000

The moderation effect of the facet-specific acceptance goal with the sociability change score (ideal-self) is not significantly different from zero (at p < .001), b = -0.048, p = 0.034.

6.7.6.2 Sociability - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9292.668 9407.182 0.938 0.049 0.057
# parameters of interest
params_lcs_socia_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_socia_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.895 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.488 NA NA
d_socia_1 ~1 -0.062 -0.122 -0.001 -0.320 -1.982 0.048
socia_t1 ~1 4.226 4.145 4.307 11.988 102.547 0.000
d_socia_1 ~~ d_socia_1 0.037 -0.021 0.095 0.993 1.242 0.214
socia_t1 ~~ d_socia_1 -0.002 -0.033 0.030 -0.026 -0.108 0.914
socia_t1 ~ frequ 0.112 0.005 0.219 0.235 2.052 0.040
d_socia_1 ~ frequ -0.022 -0.116 0.071 -0.086 -0.469 0.639
frequ ~~ frequ 0.549 0.370 0.728 1.000 6.007 0.000

The moderation effect of the frequency of self-acceptance behaviors with sociability change score (ideal-self) is not significantly different from zero, b = -0.022, p = 0.639.

6.7.6.3 Assertiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7980.554 8068.348 1 0 0.04
# parameters of interest
params_lcs_asser_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", "d_asser_1 ~ sa07_02_t1", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.922 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.420 NA NA
d_asser_1 ~1 -0.102 -0.241 0.037 -0.621 -1.433 0.152
asser_t1 ~1 4.025 3.846 4.204 11.191 44.069 0.000
d_asser_1 ~~ d_asser_1 0.026 -0.014 0.066 0.964 1.268 0.205
asser_t1 ~~ d_asser_1 -0.003 -0.032 0.026 -0.058 -0.225 0.822
d_asser_1 ~ sa07_02_t1 0.023 -0.015 0.062 0.189 1.197 0.231
sa07_02_t1 ~~ sa07_02_t1 1.747 1.573 1.921 1.000 19.717 0.000

The moderation effect of the facet-specific acceptance goal with the assertiveness change score (ideal-self) is not significantly different from zero, b = 0.023, p = 0.231.

6.7.6.4 Assertiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9217.907 9332.42 1 0 0.041
# parameters of interest
params_lcs_asser_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_asser_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.922 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.419 NA NA
d_asser_1 ~1 -0.026 -0.076 0.024 -0.155 -1.012 0.312
asser_t1 ~1 4.134 4.044 4.225 11.256 89.400 0.000
d_asser_1 ~~ d_asser_1 0.028 -0.014 0.070 0.998 1.300 0.194
asser_t1 ~~ d_asser_1 -0.001 -0.031 0.029 -0.021 -0.080 0.937
asser_t1 ~ frequ 0.147 0.045 0.250 0.297 2.812 0.005
d_asser_1 ~ frequ -0.010 -0.090 0.069 -0.046 -0.254 0.800
frequ ~~ frequ 0.550 0.374 0.726 1.000 6.127 0.000

The moderation effect of the frequency of self-acceptance behaviors with assertiveness change score (ideal-self) is not significantly different from zero, b = -0.01, p = 0.8.

6.7.6.5 Energy - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7715.501 7803.294 0.92 0.049 0.056
# parameters of interest
params_lcs_energ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", "d_energ_1 ~ sa07_03_t1", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.001 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.769 NA NA
d_energ_1 ~1 -0.002 -0.078 0.075 -0.010 -0.042 0.967
energ_t1 ~1 2.257 2.120 2.393 10.747 32.461 0.000
d_energ_1 ~~ d_energ_1 0.026 -0.020 0.072 1.000 1.107 0.268
energ_t1 ~~ d_energ_1 -0.013 -0.039 0.013 -0.386 -0.987 0.324
d_energ_1 ~ sa07_03_t1 0.001 -0.020 0.022 0.010 0.106 0.915
sa07_03_t1 ~~ sa07_03_t1 1.851 1.650 2.052 1.000 18.028 0.000

The moderation effect of the facet-specific acceptance goal with the energy change score (ideal-self) is not significantly different from zero, b = 0.001, p = 0.915.

6.7.6.6 Energy - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8918.395 9032.908 0.943 0.046 0.056
# parameters of interest
params_lcs_energ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_energ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.014 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.763 NA NA
d_energ_1 ~1 0.000 -0.035 0.034 -0.002 -0.018 0.986
energ_t1 ~1 2.222 2.106 2.339 9.538 37.289 0.000
d_energ_1 ~~ d_energ_1 0.030 -0.009 0.070 0.991 1.524 0.127
energ_t1 ~~ d_energ_1 -0.017 -0.041 0.006 -0.453 -1.463 0.143
energ_t1 ~ frequ -0.105 -0.188 -0.021 -0.327 -2.457 0.014
d_energ_1 ~ frequ -0.023 -0.078 0.032 -0.096 -0.825 0.409
frequ ~~ frequ 0.532 0.354 0.710 1.000 5.855 0.000

The moderation effect of the frequency of self-acceptance behaviors with the energy change score (ideal-self) is not significantly different from zero, b = -0.023, p = 0.409.

6.7.6.7 Compassion - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 8341.376 8429.169 0.96 0.041 0.047
# parameters of interest
params_lcs_compa_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", "d_compa_1 ~ sa07_04_t1", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.017 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.601 NA NA
d_compa_1 ~1 -0.001 -0.160 0.158 -0.003 -0.011 0.991
compa_t1 ~1 4.489 4.329 4.648 7.476 55.172 0.000
d_compa_1 ~~ d_compa_1 0.126 0.017 0.234 0.999 2.265 0.024
compa_t1 ~~ d_compa_1 -0.068 -0.141 0.006 -0.325 -1.810 0.070
d_compa_1 ~ sa07_04_t1 0.007 -0.055 0.069 0.029 0.226 0.821
sa07_04_t1 ~~ sa07_04_t1 2.024 1.813 2.235 1.000 18.799 0.000

The moderation effect of the facet-specific acceptance goal with the compassion change score (ideal-self) is not significantly different from zero, b = 0.007, p = 0.821.

6.7.6.8 Compassion - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9539.194 9653.708 0.975 0.033 0.043
# parameters of interest
params_lcs_compa_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_compa_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.016 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.604 NA NA
d_compa_1 ~1 0.020 -0.064 0.103 0.053 0.459 0.646
compa_t1 ~1 4.291 4.196 4.385 6.900 88.970 0.000
d_compa_1 ~~ d_compa_1 0.137 0.019 0.254 1.000 2.285 0.022
compa_t1 ~~ d_compa_1 -0.074 -0.155 0.006 -0.328 -1.814 0.070
compa_t1 ~ frequ 0.142 -0.015 0.299 0.168 1.773 0.076
d_compa_1 ~ frequ 0.000 -0.138 0.138 -0.001 -0.005 0.996
frequ ~~ frequ 0.544 0.365 0.724 1.000 5.935 0.000

The moderation effect of the frequency of self-acceptance behaviors with the compassion change score (ideal-self) is not significantly different from zero, b = 0, p = 0.996.

6.7.6.9 Respectfulness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 6475.254 6563.048 0.911 0.077 0.061
# parameters of interest
params_lcs_respe_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", "d_respe_1 ~ sa07_05_t1", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.999 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.391 NA NA
d_respe_1 ~1 0.007 -0.067 0.081 0.046 0.183 0.854
respe_t1 ~1 4.709 4.615 4.803 12.287 98.463 0.000
d_respe_1 ~~ d_respe_1 0.022 -0.006 0.051 0.999 1.558 0.119
respe_t1 ~~ d_respe_1 -0.011 -0.038 0.015 -0.200 -0.834 0.404
d_respe_1 ~ sa07_05_t1 -0.004 -0.040 0.031 -0.036 -0.228 0.820
sa07_05_t1 ~~ sa07_05_t1 1.744 1.473 2.015 1.000 12.613 0.000

The moderation effect of the facet-specific acceptance goal with the respectfulness change score (ideal-self) is not significantly different from zero, b = -0.004, p = 0.82.

6.7.6.10 Respectfulness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 7710.582 7825.096 0.967 0.044 0.045
# parameters of interest
params_lcs_respe_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respe_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.997 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.389 NA NA
d_respe_1 ~1 -0.001 -0.042 0.040 -0.006 -0.040 0.968
respe_t1 ~1 4.625 4.560 4.690 12.266 139.842 0.000
d_respe_1 ~~ d_respe_1 0.021 -0.005 0.048 0.975 1.563 0.118
respe_t1 ~~ d_respe_1 -0.012 -0.038 0.013 -0.234 -0.945 0.344
respe_t1 ~ frequ 0.121 0.038 0.203 0.236 2.862 0.004
d_respe_1 ~ frequ 0.031 -0.034 0.097 0.157 0.939 0.348
frequ ~~ frequ 0.545 0.367 0.723 1.000 5.998 0.000

The moderation effect of the frequency of self-acceptance behaviors with respectfulness change score (ideal-self) is not significantly different from zero, b = 0.031, p = 0.348.

6.7.6.11 Trust - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 8054.899 8142.692 0.965 0.039 0.043
# parameters of interest
params_lcs_trust_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", "d_trust_1 ~ sa07_06_t1", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.106 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.594 NA NA
d_trust_1 ~1 0.010 -0.126 0.145 0.035 0.139 0.890
trust_t1 ~1 1.967 1.795 2.140 3.858 22.330 0.000
d_trust_1 ~~ d_trust_1 0.075 0.004 0.146 0.998 2.062 0.039
trust_t1 ~~ d_trust_1 -0.061 -0.106 -0.016 -0.440 -2.678 0.007
d_trust_1 ~ sa07_06_t1 -0.009 -0.056 0.038 -0.047 -0.389 0.697
sa07_06_t1 ~~ sa07_06_t1 1.909 1.711 2.108 1.000 18.829 0.000

The moderation effect of the facet-specific acceptance goal with the trust change score (ideal-self) is not significantly different from zero, b = -0.009, p = 0.697.

6.7.6.12 Trust - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9255.534 9370.047 0.967 0.039 0.048
# parameters of interest
params_lcs_trust_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_trust_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.107 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.604 NA NA
d_trust_1 ~1 -0.015 -0.076 0.046 -0.056 -0.488 0.626
trust_t1 ~1 1.946 1.847 2.045 3.878 38.594 0.000
d_trust_1 ~~ d_trust_1 0.073 0.003 0.143 0.973 2.041 0.041
trust_t1 ~~ d_trust_1 -0.065 -0.109 -0.021 -0.490 -2.872 0.004
trust_t1 ~ frequ -0.134 -0.263 -0.005 -0.197 -2.032 0.042
d_trust_1 ~ frequ -0.061 -0.161 0.039 -0.165 -1.196 0.232
frequ ~~ frequ 0.546 0.366 0.725 1.000 5.954 0.000

The moderation effect of the frequency of self-acceptance behaviors with the trust change score (ideal-self) is not significantly different from zero (at p < .001), b = -0.061, p = 0.232.

6.7.6.13 Organization - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7010.137 7097.93 0.978 0.029 0.045
# parameters of interest
params_lcs_organ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", "d_organ_1 ~ sa07_07_t1", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.972 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.604 NA NA
d_organ_1 ~1 -0.067 -0.205 0.071 -0.255 -0.957 0.338
organ_t1 ~1 1.724 1.558 1.890 4.061 20.374 0.000
d_organ_1 ~~ d_organ_1 0.069 0.009 0.129 0.988 2.258 0.024
organ_t1 ~~ d_organ_1 -0.030 -0.079 0.019 -0.269 -1.191 0.234
d_organ_1 ~ sa07_07_t1 0.020 -0.021 0.062 0.112 0.967 0.334
sa07_07_t1 ~~ sa07_07_t1 2.070 1.888 2.251 1.000 22.344 0.000

The moderation effect of the facet-specific acceptance goal with the organization change score (ideal-self) is not significantly different from zero, b = 0.02, p = 0.334.

6.7.6.14 Organization - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8190.663 8305.176 0.992 0.017 0.043
# parameters of interest
params_lcs_organ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_organ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.970 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.605 NA NA
d_organ_1 ~1 -0.005 -0.061 0.051 -0.019 -0.177 0.860
organ_t1 ~1 1.754 1.651 1.857 4.180 33.482 0.000
d_organ_1 ~~ d_organ_1 0.068 0.008 0.129 1.000 2.209 0.027
organ_t1 ~~ d_organ_1 -0.029 -0.080 0.022 -0.269 -1.119 0.263
organ_t1 ~ frequ -0.116 -0.231 -0.001 -0.205 -1.986 0.047
d_organ_1 ~ frequ -0.003 -0.098 0.091 -0.009 -0.067 0.947
frequ ~~ frequ 0.545 0.366 0.723 1.000 5.982 0.000

The moderation effect of the frequency of self-acceptance behaviors with the organization change score (ideal-self) is not significantly different from zero, b = -0.003, p = 0.947.

6.7.6.15 Productiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 6374.471 6462.264 0.909 0.069 0.066
# parameters of interest
params_lcs_produ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", "d_produ_1 ~ sa07_08_t1", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.046 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.676 NA NA
d_produ_1 ~1 -0.114 -0.227 0.000 -0.476 -1.953 0.051
produ_t1 ~1 1.576 1.436 1.715 4.265 22.137 0.000
d_produ_1 ~~ d_produ_1 0.056 0.009 0.103 0.979 2.314 0.021
produ_t1 ~~ d_produ_1 -0.034 -0.071 0.002 -0.396 -1.851 0.064
d_produ_1 ~ sa07_08_t1 0.025 -0.008 0.059 0.146 1.474 0.141
sa07_08_t1 ~~ sa07_08_t1 1.880 1.691 2.069 1.000 19.477 0.000

The moderation effect of the facet-specific acceptance goal with the productiveness change score (ideal-self) is not significantly different from zero, b = 0.025, p = 0.141.

6.7.6.16 Productiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 7584.382 7698.896 0.922 0.064 0.064
# parameters of interest
params_lcs_produ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_produ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.042 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.675 NA NA
d_produ_1 ~1 -0.029 -0.076 0.017 -0.123 -1.236 0.216
produ_t1 ~1 1.585 1.507 1.663 4.281 39.888 0.000
d_produ_1 ~~ d_produ_1 0.055 0.008 0.101 0.952 2.300 0.021
produ_t1 ~~ d_produ_1 -0.036 -0.073 0.001 -0.423 -1.928 0.054
produ_t1 ~ frequ -0.060 -0.144 0.025 -0.117 -1.377 0.168
d_produ_1 ~ frequ -0.072 -0.145 0.001 -0.219 -1.934 0.053
frequ ~~ frequ 0.532 0.355 0.710 1.000 5.875 0.000

The moderation effect of the frequency of self-acceptance behaviors with the productiveness change score (ideal-self) is not significantly different from zero (at p < .001), b = -0.072, p = 0.053.

6.7.6.17 Responsibility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7227.03 7314.824 0.959 0.047 0.051
# parameters of interest
params_lcs_respo_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", "d_respo_1 ~ sa07_09_t1", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.912 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.623 NA NA
d_respo_1 ~1 0.070 -0.029 0.168 0.263 1.383 0.167
respo_t1 ~1 4.294 4.156 4.433 11.063 60.742 0.000
d_respo_1 ~~ d_respo_1 0.069 0.014 0.125 0.987 2.449 0.014
respo_t1 ~~ d_respo_1 -0.021 -0.056 0.014 -0.205 -1.179 0.238
d_respo_1 ~ sa07_09_t1 -0.021 -0.058 0.016 -0.113 -1.098 0.272
sa07_09_t1 ~~ sa07_09_t1 2.069 1.860 2.278 1.000 19.415 0.000

The moderation effect of the facet-specific acceptance goal with the responsibility change score (ideal-self) is not significantly different from zero, b = -0.021, p = 0.272.

6.7.6.18 Responsibility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8408.147 8522.66 0.972 0.038 0.049
# parameters of interest
params_lcs_respo_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respo_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.912 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.626 NA NA
d_respo_1 ~1 0.018 -0.035 0.071 0.066 0.656 0.512
respo_t1 ~1 4.239 4.135 4.343 10.726 80.005 0.000
d_respo_1 ~~ d_respo_1 0.071 0.015 0.127 0.967 2.484 0.013
respo_t1 ~~ d_respo_1 -0.024 -0.060 0.012 -0.230 -1.302 0.193
respo_t1 ~ frequ 0.084 -0.021 0.189 0.156 1.568 0.117
d_respo_1 ~ frequ 0.067 -0.014 0.148 0.181 1.622 0.105
frequ ~~ frequ 0.541 0.361 0.720 1.000 5.904 0.000

The moderation effect of the frequency of self-acceptance behaviors with the responsibility change score (ideal-self) is not significantly different from zero (at p < .001), b = 0.067, p = 0.105.

6.7.6.19 Anxiety - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7999.913 8087.706 0.922 0.05 0.059
# parameters of interest
params_lcs_anxie_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", "d_anxie_1 ~ sa07_10_t1", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.180 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.730 NA NA
d_anxie_1 ~1 0.028 -0.111 0.167 0.110 0.391 0.696
anxie_t1 ~1 4.554 4.405 4.703 11.143 59.850 0.000
d_anxie_1 ~~ d_anxie_1 0.064 -0.004 0.132 1.000 1.850 0.064
anxie_t1 ~~ d_anxie_1 -0.056 -0.118 0.007 -0.538 -1.746 0.081
d_anxie_1 ~ sa07_10_t1 -0.003 -0.038 0.033 -0.014 -0.139 0.890
sa07_10_t1 ~~ sa07_10_t1 2.115 1.921 2.308 1.000 21.431 0.000

The moderation effect of the facet-specific acceptance goal with the anxiety change score (ideal-self) is not significantly different from zero, b = -0.003, p = 0.89.

6.7.6.20 Anxiety - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9172.921 9287.434 0.969 0.034 0.05
# parameters of interest
params_lcs_anxie_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_anxie_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.183 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.726 NA NA
d_anxie_1 ~1 0.020 -0.040 0.080 0.079 0.662 0.508
anxie_t1 ~1 4.530 4.450 4.609 10.777 111.419 0.000
d_anxie_1 ~~ d_anxie_1 0.064 -0.005 0.132 0.956 1.812 0.070
anxie_t1 ~~ d_anxie_1 -0.054 -0.115 0.008 -0.518 -1.705 0.088
anxie_t1 ~ frequ 0.120 0.010 0.231 0.213 2.144 0.032
d_anxie_1 ~ frequ -0.073 -0.168 0.023 -0.210 -1.496 0.135
frequ ~~ frequ 0.554 0.373 0.734 1.000 6.014 0.000

The moderation effect of the frequency of self-acceptance behaviors with the anxiety change score (ideal-self) is not significantly different from zero, b = -0.073, p = 0.135.

6.7.6.21 Depression - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 6424.347 6512.141 0.94 0.055 0.052
# parameters of interest
params_lcs_depre_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", "d_depre_1 ~ sa07_11_t1", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.157 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.700 NA NA
d_depre_1 ~1 0.020 -0.099 0.138 0.074 0.324 0.746
depre_t1 ~1 4.440 4.302 4.578 10.146 63.122 0.000
d_depre_1 ~~ d_depre_1 0.070 0.012 0.128 0.999 2.357 0.018
depre_t1 ~~ d_depre_1 -0.059 -0.108 -0.011 -0.512 -2.394 0.017
d_depre_1 ~ sa07_11_t1 -0.004 -0.038 0.030 -0.024 -0.248 0.804
sa07_11_t1 ~~ sa07_11_t1 2.106 1.918 2.294 1.000 21.989 0.000

The moderation effect of the facet-specific acceptance goal with the depression change score (ideal-self) is not significantly different from zero, b = -0.004, p = 0.804.

6.7.6.22 Depression - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 7599.7 7714.213 0.944 0.053 0.057
# parameters of interest
params_lcs_depre_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_depre_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.156 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.700 NA NA
d_depre_1 ~1 0.006 -0.047 0.059 0.022 0.226 0.821
depre_t1 ~1 4.443 4.368 4.519 9.939 115.332 0.000
d_depre_1 ~~ d_depre_1 0.073 0.012 0.133 0.993 2.360 0.018
depre_t1 ~~ d_depre_1 -0.060 -0.108 -0.011 -0.505 -2.418 0.016
depre_t1 ~ frequ 0.109 -0.004 0.222 0.180 1.895 0.058
d_depre_1 ~ frequ -0.031 -0.115 0.053 -0.084 -0.719 0.472
frequ ~~ frequ 0.543 0.363 0.723 1.000 5.924 0.000

The moderation effect of the frequency of self-acceptance behaviors with the depression change score (ideal-self) is not significantly different from zero, b = -0.031, p = 0.472.

6.7.6.23 Volatility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7401.116 7488.909 0.954 0.042 0.051
# parameters of interest
params_lcs_volat_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", "d_volat_1 ~ sa07_12_t1", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.020 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.570 NA NA
d_volat_1 ~1 0.108 -0.018 0.234 0.424 1.681 0.093
volat_t1 ~1 1.425 1.288 1.561 3.128 20.433 0.000
d_volat_1 ~~ d_volat_1 0.062 -0.002 0.126 0.953 1.897 0.058
volat_t1 ~~ d_volat_1 -0.031 -0.076 0.015 -0.279 -1.330 0.184
d_volat_1 ~ sa07_12_t1 -0.042 -0.087 0.002 -0.216 -1.855 0.064
sa07_12_t1 ~~ sa07_12_t1 1.709 1.531 1.887 1.000 18.847 0.000

The moderation effect of the facet-specific acceptance goal with the volatility change score (ideal-self) is not significantly different from zero, b = -0.042, p = 0.064.

6.7.6.24 Volatility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8655.333 8769.846 0.96 0.041 0.051
# parameters of interest
params_lcs_volat_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_volat_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.013 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.565 NA NA
d_volat_1 ~1 -0.009 -0.072 0.055 -0.034 -0.269 0.788
volat_t1 ~1 1.646 1.566 1.726 3.576 40.293 0.000
d_volat_1 ~~ d_volat_1 0.065 -0.001 0.132 0.992 1.926 0.054
volat_t1 ~~ d_volat_1 -0.038 -0.087 0.012 -0.324 -1.479 0.139
volat_t1 ~ frequ -0.110 -0.234 0.013 -0.176 -1.747 0.081
d_volat_1 ~ frequ -0.031 -0.133 0.070 -0.090 -0.606 0.545
frequ ~~ frequ 0.543 0.365 0.722 1.000 5.956 0.000

The moderation effect of the frequency of self-acceptance behaviors with the volatility change score (ideal-self) is significantly different from zero, b = -0.031, p = 0.545.

6.7.6.25 Curiosity - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7804.168 7891.962 0.972 0.035 0.05
# parameters of interest
params_lcs_curio_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", "d_curio_1 ~ sa07_13_t1", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.085 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.547 NA NA
d_curio_1 ~1 -0.035 -0.124 0.055 -0.165 -0.762 0.446
curio_t1 ~1 4.653 4.529 4.777 11.116 73.271 0.000
d_curio_1 ~~ d_curio_1 0.044 -0.007 0.094 0.981 1.702 0.089
curio_t1 ~~ d_curio_1 -0.032 -0.071 0.006 -0.382 -1.633 0.103
d_curio_1 ~ sa07_13_t1 0.022 -0.013 0.058 0.138 1.222 0.222
sa07_13_t1 ~~ sa07_13_t1 1.724 1.530 1.918 1.000 17.438 0.000

The moderation effect of the facet-specific acceptance goal with the curiosity change score (ideal-self) is not significantly different from zero, b = 0.022, p = 0.222.

6.7.6.26 Curiosity - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9065.942 9180.456 0.983 0.027 0.049
# parameters of interest
params_lcs_curio_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_curio_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.084 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.543 NA NA
d_curio_1 ~1 0.017 -0.036 0.070 0.081 0.613 0.540
curio_t1 ~1 4.458 4.383 4.533 10.853 116.407 0.000
d_curio_1 ~~ d_curio_1 0.042 -0.007 0.091 0.992 1.692 0.091
curio_t1 ~~ d_curio_1 -0.034 -0.073 0.005 -0.404 -1.689 0.091
curio_t1 ~ frequ 0.019 -0.083 0.121 0.035 0.369 0.712
d_curio_1 ~ frequ 0.025 -0.051 0.101 0.090 0.643 0.520
frequ ~~ frequ 0.549 0.370 0.728 1.000 6.009 0.000

The moderation effect of the frequency of self-acceptance behaviors with the curiosity change score (ideal-self) is not significantly different from zero, b = 0.025, p = 0.52.

6.7.6.27 Aesthetic - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7878.706 7966.499 0.97 0.044 0.044
# parameters of interest
params_lcs_aesth_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", "d_aesth_1 ~ sa07_14_t1", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.972 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.609 NA NA
d_aesth_1 ~1 -0.008 -0.061 0.046 -0.047 -0.290 0.772
aesth_t1 ~1 2.767 2.576 2.958 10.206 28.434 0.000
d_aesth_1 ~~ d_aesth_1 0.029 -0.001 0.059 0.999 1.875 0.061
aesth_t1 ~~ d_aesth_1 -0.012 -0.029 0.006 -0.266 -1.323 0.186
d_aesth_1 ~ sa07_14_t1 -0.004 -0.023 0.014 -0.037 -0.459 0.646
sa07_14_t1 ~~ sa07_14_t1 2.002 1.823 2.180 1.000 21.957 0.000

The moderation effect of the facet-specific acceptance goal with the aesthetic change score (ideal-self) is not significantly different from zero, b = -0.004, p = 0.646.

6.7.6.28 Aesthetic - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9077.014 9191.528 0.979 0.035 0.047
# parameters of interest
params_lcs_aesth_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_aesth_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.969 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.609 NA NA
d_aesth_1 ~1 -0.019 -0.052 0.014 -0.117 -1.145 0.252
aesth_t1 ~1 2.903 2.767 3.038 11.217 42.031 0.000
d_aesth_1 ~~ d_aesth_1 0.026 -0.003 0.055 0.992 1.788 0.074
aesth_t1 ~~ d_aesth_1 -0.012 -0.030 0.006 -0.298 -1.310 0.190
aesth_t1 ~ frequ -0.091 -0.159 -0.024 -0.260 -2.663 0.008
d_aesth_1 ~ frequ -0.020 -0.075 0.034 -0.091 -0.723 0.470
frequ ~~ frequ 0.540 0.362 0.718 1.000 5.940 0.000

The moderation effect of the frequency of self-acceptance behaviors with the aesthetic change score (ideal-self) is not significantly different from zero, b = -0.02, p = 0.47.

6.7.6.29 Imagination - specific, facet-level acceptance goal as moderator of change

Results summary (*sa07_$$_t1* = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7447.667 7535.461 0.908 0.07 0.06
# parameters of interest
params_lcs_imagi_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", "d_imagi_1 ~ sa07_15_t1", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.047 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.654 NA NA
d_imagi_1 ~1 0.025 -0.096 0.146 0.076 0.409 0.683
imagi_t1 ~1 4.711 4.573 4.848 8.880 67.101 0.000
d_imagi_1 ~~ d_imagi_1 0.110 0.029 0.190 0.997 2.662 0.008
imagi_t1 ~~ d_imagi_1 -0.069 -0.129 -0.008 -0.397 -2.231 0.026
d_imagi_1 ~ sa07_15_t1 -0.013 -0.056 0.031 -0.056 -0.574 0.566
sa07_15_t1 ~~ sa07_15_t1 2.135 1.956 2.314 1.000 23.329 0.000

The moderation effect of the facet-specific acceptance goal with the imagination change score (ideal-self) is not significantly different from zero, b = -0.013, p = 0.566.

6.7.6.30 Imagination - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8627.828 8742.342 0.966 0.041 0.048
# parameters of interest
params_lcs_imagi_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_imagi_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.042 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.651 NA NA
d_imagi_1 ~1 -0.012 -0.074 0.051 -0.035 -0.362 0.717
imagi_t1 ~1 4.545 4.468 4.622 8.635 115.719 0.000
d_imagi_1 ~~ d_imagi_1 0.108 0.028 0.188 0.996 2.635 0.008
imagi_t1 ~~ d_imagi_1 -0.063 -0.125 -0.001 -0.370 -1.991 0.046
imagi_t1 ~ frequ 0.124 0.024 0.223 0.173 2.439 0.015
d_imagi_1 ~ frequ -0.029 -0.133 0.074 -0.066 -0.554 0.580
frequ ~~ frequ 0.544 0.366 0.723 1.000 5.977 0.000

The moderation effect of the frequency of self-acceptance behaviors with the imagination change score (ideal-self) is not significantly different from zero, b = -0.029, p = 0.58.

6.7.7 Big Five facets (ideal self - follow-up T3)

6.7.7.1 Sociability - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6874.112 6958.038 0.953 0.048 0.058
# parameters of interest
params_lcs_socia_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t3 ~ socia_t2", "d_socia_1 =~ socia_t3", "socia_t2 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", "d_socia_1 ~ sa07_01_t1", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t2 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t3 ~ socia_t2 1.000 1.000 1.000 1.051 NA NA
d_socia_1 =~ socia_t3 1.000 1.000 1.000 0.624 NA NA
d_socia_1 ~1 -0.064 -0.197 0.070 -0.272 -0.935 0.350
socia_t2 ~1 4.173 4.002 4.343 10.603 48.009 0.000
d_socia_1 ~~ d_socia_1 0.054 0.005 0.103 0.985 2.147 0.032
socia_t2 ~~ d_socia_1 -0.034 -0.073 0.004 -0.377 -1.749 0.080
d_socia_1 ~ sa07_01_t1 0.020 -0.017 0.058 0.121 1.061 0.289
sa07_01_t1 ~~ sa07_01_t1 1.925 1.713 2.137 1.000 17.799 0.000

The moderation effect of the facet-specific acceptance goal with the sociability change score from T2 to T3 (ideal-self) is not significantly different from zero (at p < .001), b = 0.02, p = 0.289.

6.7.7.2 Sociability - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 8264.175 8373.644 0.94 0.056 0.059
# parameters of interest
params_lcs_socia_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_socia_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t3 ~ socia_t2", "d_socia_1 =~ socia_t3", "socia_t2 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t2 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t2 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t3 ~ socia_t2 1.000 1.000 1.000 1.049 NA NA
d_socia_1 =~ socia_t3 1.000 1.000 1.000 0.619 NA NA
d_socia_1 ~1 0.004 -0.059 0.066 0.016 0.122 0.903
socia_t2 ~1 4.159 4.065 4.253 10.403 86.649 0.000
d_socia_1 ~~ d_socia_1 0.056 0.005 0.106 1.000 2.148 0.032
socia_t2 ~~ d_socia_1 -0.035 -0.075 0.005 -0.375 -1.706 0.088
socia_t2 ~ frequ 0.081 -0.030 0.191 0.149 1.433 0.152
d_socia_1 ~ frequ -0.004 -0.097 0.090 -0.011 -0.074 0.941
frequ ~~ frequ 0.550 0.371 0.729 1.000 6.036 0.000

The moderation effect of the frequency of self-acceptance behaviors with sociability change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.004, p = 0.941.

6.7.7.3 Assertiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6957.508 7041.434 0.987 0.023 0.047
# parameters of interest
params_lcs_asser_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t3 ~ asser_t2", "d_asser_1 =~ asser_t3", "asser_t2 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", "d_asser_1 ~ sa07_02_t1", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t2 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t3 ~ asser_t2 1.000 1.000 1.000 1.054 NA NA
d_asser_1 =~ asser_t3 1.000 1.000 1.000 0.797 NA NA
d_asser_1 ~1 0.010 -0.142 0.163 0.035 0.133 0.894
asser_t2 ~1 3.930 3.705 4.154 10.032 34.272 0.000
d_asser_1 ~~ d_asser_1 0.088 0.023 0.152 0.999 2.670 0.008
asser_t2 ~~ d_asser_1 -0.051 -0.100 -0.002 -0.445 -2.029 0.042
d_asser_1 ~ sa07_02_t1 -0.008 -0.051 0.035 -0.037 -0.379 0.705
sa07_02_t1 ~~ sa07_02_t1 1.767 1.578 1.955 1.000 18.385 0.000

The moderation effect of the facet-specific acceptance goal with the assertiveness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.008, p = 0.705.

6.7.7.4 Assertiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 8372.446 8481.915 1 0 0.044
# parameters of interest
params_lcs_asser_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_asser_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t3 ~ asser_t2", "d_asser_1 =~ asser_t3", "asser_t2 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t2 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t2 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t3 ~ asser_t2 1.000 1.000 1.000 1.063 NA NA
d_asser_1 =~ asser_t3 1.000 1.000 1.000 0.800 NA NA
d_asser_1 ~1 -0.017 -0.074 0.040 -0.056 -0.594 0.553
asser_t2 ~1 4.107 4.000 4.214 10.087 75.476 0.000
d_asser_1 ~~ d_asser_1 0.092 0.030 0.154 0.982 2.912 0.004
asser_t2 ~~ d_asser_1 -0.052 -0.099 -0.005 -0.437 -2.178 0.029
asser_t2 ~ frequ 0.140 0.006 0.275 0.256 2.053 0.040
d_asser_1 ~ frequ -0.056 -0.150 0.038 -0.135 -1.162 0.245
frequ ~~ frequ 0.550 0.374 0.726 1.000 6.131 0.000

The moderation effect of the frequency of self-acceptance behaviors with assertiveness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.056, p = 0.245.

6.7.7.5 Energy - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6588.092 6672.019 0.921 0.048 0.062
# parameters of interest
params_lcs_energ_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t3 ~ energ_t2", "d_energ_1 =~ energ_t3", "energ_t2 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", "d_energ_1 ~ sa07_03_t1", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t2 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t3 ~ energ_t2 1.000 1.000 1.000 0.971 NA NA
d_energ_1 =~ energ_t3 1.000 1.000 1.000 0.634 NA NA
d_energ_1 ~1 0.014 -0.081 0.109 0.085 0.286 0.775
energ_t2 ~1 2.266 2.118 2.414 9.093 30.084 0.000
d_energ_1 ~~ d_energ_1 0.026 -0.018 0.071 0.998 1.153 0.249
energ_t2 ~~ d_energ_1 -0.011 -0.035 0.012 -0.283 -0.972 0.331
d_energ_1 ~ sa07_03_t1 -0.005 -0.033 0.023 -0.041 -0.344 0.731
sa07_03_t1 ~~ sa07_03_t1 1.868 1.644 2.092 1.000 16.353 0.000

The moderation effect of the facet-specific acceptance goal with the energy change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.005, p = 0.731.

6.7.7.6 Energy - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7975.067 8084.537 0.927 0.054 0.068
# parameters of interest
params_lcs_energ_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_energ_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t3 ~ energ_t2", "d_energ_1 =~ energ_t3", "energ_t2 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t2 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t2 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t3 ~ energ_t2 1.000 1.000 1.000 0.958 NA NA
d_energ_1 =~ energ_t3 1.000 1.000 1.000 0.651 NA NA
d_energ_1 ~1 -0.001 -0.043 0.040 -0.008 -0.065 0.949
energ_t2 ~1 2.232 2.106 2.357 8.679 34.905 0.000
d_energ_1 ~~ d_energ_1 0.030 -0.016 0.076 0.981 1.269 0.204
energ_t2 ~~ d_energ_1 -0.010 -0.032 0.012 -0.243 -0.892 0.372
energ_t2 ~ frequ -0.124 -0.235 -0.013 -0.352 -2.190 0.029
d_energ_1 ~ frequ 0.033 -0.028 0.095 0.139 1.058 0.290
frequ ~~ frequ 0.531 0.353 0.709 1.000 5.846 0.000

The moderation effect of the frequency of self-acceptance behaviors with the energy change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.033, p = 0.29.

6.7.7.7 Compassion - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 7022.316 7106.242 0.976 0.036 0.04
# parameters of interest
params_lcs_compa_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t3 ~ compa_t2", "d_compa_1 =~ compa_t3", "compa_t2 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", "d_compa_1 ~ sa07_04_t1", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t2 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t3 ~ compa_t2 1.000 1.000 1.000 0.986 NA NA
d_compa_1 =~ compa_t3 1.000 1.000 1.000 0.565 NA NA
d_compa_1 ~1 0.013 -0.135 0.160 0.034 0.167 0.868
compa_t2 ~1 4.529 4.362 4.697 7.048 53.033 0.000
d_compa_1 ~~ d_compa_1 0.136 0.019 0.252 1.000 2.272 0.023
compa_t2 ~~ d_compa_1 -0.063 -0.165 0.040 -0.269 -1.196 0.232
d_compa_1 ~ sa07_04_t1 -0.004 -0.063 0.056 -0.014 -0.116 0.908
sa07_04_t1 ~~ sa07_04_t1 2.021 1.779 2.262 1.000 16.389 0.000

The moderation effect of the facet-specific acceptance goal with the compassion change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.004, p = 0.908.

6.7.7.8 Compassion - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 8404.887 8514.357 0.979 0.033 0.043
# parameters of interest
params_lcs_compa_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_compa_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t3 ~ compa_t2", "d_compa_1 =~ compa_t3", "compa_t2 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t2 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t2 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t3 ~ compa_t2 1.000 1.000 1.000 0.989 NA NA
d_compa_1 =~ compa_t3 1.000 1.000 1.000 0.567 NA NA
d_compa_1 ~1 0.003 -0.080 0.086 0.008 0.071 0.943
compa_t2 ~1 4.336 4.232 4.440 6.690 81.798 0.000
d_compa_1 ~~ d_compa_1 0.137 0.018 0.255 0.991 2.260 0.024
compa_t2 ~~ d_compa_1 -0.061 -0.166 0.045 -0.256 -1.129 0.259
compa_t2 ~ frequ 0.139 0.007 0.272 0.159 2.062 0.039
d_compa_1 ~ frequ -0.048 -0.185 0.088 -0.096 -0.696 0.487
frequ ~~ frequ 0.545 0.364 0.725 1.000 5.918 0.000

The moderation effect of the frequency of self-acceptance behaviors with the compassion change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.048, p = 0.487.

6.7.7.9 Respectfulness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 5452.331 5536.258 0.875 0.098 0.091
# parameters of interest
params_lcs_respe_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t3 ~ respe_t2", "d_respe_1 =~ respe_t3", "respe_t2 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", "d_respe_1 ~ sa07_05_t1", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t2 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t3 ~ respe_t2 1.000 1.000 1.000 1.059 NA NA
d_respe_1 =~ respe_t3 1.000 1.000 1.000 0.423 NA NA
d_respe_1 ~1 -0.029 -0.088 0.030 -0.201 -0.963 0.335
respe_t2 ~1 4.777 4.670 4.883 13.263 87.896 0.000
d_respe_1 ~~ d_respe_1 0.021 -0.008 0.049 0.991 1.426 0.154
respe_t2 ~~ d_respe_1 -0.017 -0.036 0.003 -0.326 -1.640 0.101
d_respe_1 ~ sa07_05_t1 0.010 -0.020 0.040 0.093 0.667 0.505
sa07_05_t1 ~~ sa07_05_t1 1.738 1.433 2.043 1.000 11.166 0.000

The moderation effect of the facet-specific acceptance goal with the respectfulness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.01, p = 0.505.

6.7.7.10 Respectfulness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 6864.934 6974.403 0.939 0.065 0.071
# parameters of interest
params_lcs_respe_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_respe_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t3 ~ respe_t2", "d_respe_1 =~ respe_t3", "respe_t2 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t2 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t2 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t3 ~ respe_t2 1.000 1.000 1.000 1.052 NA NA
d_respe_1 =~ respe_t3 1.000 1.000 1.000 0.425 NA NA
d_respe_1 ~1 -0.010 -0.045 0.025 -0.069 -0.537 0.591
respe_t2 ~1 4.684 4.621 4.747 13.574 145.043 0.000
d_respe_1 ~~ d_respe_1 0.017 -0.007 0.042 0.884 1.370 0.171
respe_t2 ~~ d_respe_1 -0.011 -0.029 0.008 -0.247 -1.137 0.256
respe_t2 ~ frequ 0.134 0.065 0.203 0.286 3.793 0.000
d_respe_1 ~ frequ -0.064 -0.119 -0.010 -0.341 -2.312 0.021
frequ ~~ frequ 0.547 0.369 0.726 1.000 5.999 0.000

The moderation effect of the frequency of self-acceptance behaviors with respectfulness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.064, p = 0.021.

6.7.7.11 Trust - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6808.283 6892.21 0.974 0.036 0.043
# parameters of interest
params_lcs_trust_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t3 ~ trust_t2", "d_trust_1 =~ trust_t3", "trust_t2 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", "d_trust_1 ~ sa07_06_t1", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t2 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t3 ~ trust_t2 1.000 1.000 1.000 0.979 NA NA
d_trust_1 =~ trust_t3 1.000 1.000 1.000 0.480 NA NA
d_trust_1 ~1 -0.005 -0.112 0.101 -0.027 -0.098 0.922
trust_t2 ~1 1.973 1.812 2.134 4.903 24.078 0.000
d_trust_1 ~~ d_trust_1 0.039 -0.012 0.089 0.998 1.501 0.133
trust_t2 ~~ d_trust_1 -0.016 -0.047 0.015 -0.200 -0.993 0.321
d_trust_1 ~ sa07_06_t1 0.007 -0.034 0.048 0.049 0.341 0.733
sa07_06_t1 ~~ sa07_06_t1 1.903 1.686 2.120 1.000 17.178 0.000

The moderation effect of the facet-specific acceptance goal with the trust change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.007, p = 0.733.

6.7.7.12 Trust - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 8187.363 8296.832 0.989 0.024 0.044
# parameters of interest
params_lcs_trust_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_trust_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t3 ~ trust_t2", "d_trust_1 =~ trust_t3", "trust_t2 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t2 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t2 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t3 ~ trust_t2 1.000 1.000 1.000 0.981 NA NA
d_trust_1 =~ trust_t3 1.000 1.000 1.000 0.476 NA NA
d_trust_1 ~1 0.012 -0.039 0.062 0.061 0.449 0.654
trust_t2 ~1 1.951 1.847 2.054 5.046 36.858 0.000
d_trust_1 ~~ d_trust_1 0.033 -0.013 0.079 0.939 1.400 0.162
trust_t2 ~~ d_trust_1 -0.009 -0.036 0.019 -0.131 -0.623 0.533
trust_t2 ~ frequ -0.175 -0.280 -0.069 -0.335 -3.240 0.001
d_trust_1 ~ frequ 0.062 -0.015 0.139 0.246 1.590 0.112
frequ ~~ frequ 0.548 0.369 0.728 1.000 5.990 0.000

The moderation effect of the frequency of self-acceptance behaviors with the trust change score from T2 to T3 (ideal-self) is not significantly different from zero (at p < .001), b = 0.062, p = 0.112.

6.7.7.13 Organization - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 5925.007 6008.933 0.901 0.068 0.076
# parameters of interest
params_lcs_organ_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t3 ~ organ_t2", "d_organ_1 =~ organ_t3", "organ_t2 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", "d_organ_1 ~ sa07_07_t1", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t2 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t3 ~ organ_t2 1.000 1.000 1.000 1.011 NA NA
d_organ_1 =~ organ_t3 1.000 1.000 1.000 0.588 NA NA
d_organ_1 ~1 0.028 -0.111 0.167 0.106 0.393 0.694
organ_t2 ~1 1.570 1.386 1.754 3.475 16.726 0.000
d_organ_1 ~~ d_organ_1 0.069 -0.003 0.141 0.997 1.871 0.061
organ_t2 ~~ d_organ_1 -0.036 -0.089 0.017 -0.306 -1.330 0.184
d_organ_1 ~ sa07_07_t1 -0.010 -0.053 0.033 -0.056 -0.463 0.644
sa07_07_t1 ~~ sa07_07_t1 2.101 1.901 2.301 1.000 20.565 0.000

The moderation effect of the facet-specific acceptance goal with the organization change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.01, p = 0.644.

6.7.7.14 Organization - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7288.055 7397.524 0.943 0.053 0.066
# parameters of interest
params_lcs_organ_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_organ_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t3 ~ organ_t2", "d_organ_1 =~ organ_t3", "organ_t2 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t2 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t2 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t3 ~ organ_t2 1.000 1.000 1.000 1.013 NA NA
d_organ_1 =~ organ_t3 1.000 1.000 1.000 0.590 NA NA
d_organ_1 ~1 -0.003 -0.064 0.058 -0.012 -0.100 0.920
organ_t2 ~1 1.666 1.563 1.769 3.703 31.645 0.000
d_organ_1 ~~ d_organ_1 0.068 -0.004 0.139 0.987 1.855 0.064
organ_t2 ~~ d_organ_1 -0.034 -0.085 0.017 -0.297 -1.308 0.191
organ_t2 ~ frequ -0.127 -0.239 -0.014 -0.208 -2.206 0.027
d_organ_1 ~ frequ 0.041 -0.047 0.129 0.115 0.905 0.365
frequ ~~ frequ 0.545 0.366 0.723 1.000 5.979 0.000

The moderation effect of the frequency of self-acceptance behaviors with the organization change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.041, p = 0.365.

6.7.7.15 Productiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 5246.662 5330.588 0.924 0.068 0.06
# parameters of interest
params_lcs_produ_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t3 ~ produ_t2", "d_produ_1 =~ produ_t3", "produ_t2 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", "d_produ_1 ~ sa07_08_t1", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t2 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t3 ~ produ_t2 1.000 1.000 1.000 0.933 NA NA
d_produ_1 =~ produ_t3 1.000 1.000 1.000 0.589 NA NA
d_produ_1 ~1 0.078 -0.034 0.190 0.323 1.368 0.171
produ_t2 ~1 1.386 1.254 1.517 3.615 20.684 0.000
d_produ_1 ~~ d_produ_1 0.058 0.004 0.113 0.998 2.087 0.037
produ_t2 ~~ d_produ_1 -0.018 -0.051 0.016 -0.194 -1.042 0.297
d_produ_1 ~ sa07_08_t1 -0.007 -0.040 0.026 -0.042 -0.437 0.662
sa07_08_t1 ~~ sa07_08_t1 1.945 1.739 2.151 1.000 18.494 0.000

The moderation effect of the facet-specific acceptance goal with the productiveness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.007, p = 0.662.

6.7.7.16 Productiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 6628.406 6737.875 0.934 0.063 0.06
# parameters of interest
params_lcs_produ_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_produ_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t3 ~ produ_t2", "d_produ_1 =~ produ_t3", "produ_t2 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t2 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t2 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t3 ~ produ_t2 1.000 1.000 1.000 0.933 NA NA
d_produ_1 =~ produ_t3 1.000 1.000 1.000 0.588 NA NA
d_produ_1 ~1 0.055 0.000 0.109 0.225 1.976 0.048
produ_t2 ~1 1.504 1.428 1.580 3.889 38.867 0.000
d_produ_1 ~~ d_produ_1 0.058 0.003 0.113 0.973 2.055 0.040
produ_t2 ~~ d_produ_1 -0.014 -0.049 0.020 -0.161 -0.812 0.417
produ_t2 ~ frequ -0.140 -0.234 -0.046 -0.265 -2.917 0.004
d_produ_1 ~ frequ 0.055 -0.022 0.131 0.164 1.404 0.160
frequ ~~ frequ 0.534 0.355 0.712 1.000 5.863 0.000

The moderation effect of the frequency of self-acceptance behaviors with the productiveness change score from T2 to T3 (ideal-self) is not significantly different from zero (at p < .001), b = 0.055, p = 0.16.

6.7.7.17 Responsibility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6202.454 6286.381 0.947 0.054 0.052
# parameters of interest
params_lcs_respo_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t3 ~ respo_t2", "d_respo_1 =~ respo_t3", "respo_t2 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", "d_respo_1 ~ sa07_09_t1", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t2 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t3 ~ respo_t2 1.000 1.000 1.000 0.991 NA NA
d_respo_1 =~ respo_t3 1.000 1.000 1.000 0.380 NA NA
d_respo_1 ~1 0.039 -0.073 0.151 0.205 0.688 0.491
respo_t2 ~1 4.429 4.270 4.588 8.843 54.611 0.000
d_respo_1 ~~ d_respo_1 0.036 -0.020 0.093 0.987 1.256 0.209
respo_t2 ~~ d_respo_1 -0.017 -0.060 0.025 -0.184 -0.799 0.424
d_respo_1 ~ sa07_09_t1 -0.015 -0.059 0.028 -0.115 -0.682 0.495
sa07_09_t1 ~~ sa07_09_t1 2.123 1.890 2.357 1.000 17.822 0.000

The moderation effect of the facet-specific acceptance goal with the responsibility change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.015, p = 0.495.

6.7.7.18 Responsibility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7560.493 7669.963 0.96 0.048 0.052
# parameters of interest
params_lcs_respo_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_respo_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t3 ~ respo_t2", "d_respo_1 =~ respo_t3", "respo_t2 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t2 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t2 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t3 ~ respo_t2 1.000 1.000 1.000 0.990 NA NA
d_respo_1 =~ respo_t3 1.000 1.000 1.000 0.379 NA NA
d_respo_1 ~1 0.001 -0.060 0.061 0.003 0.017 0.987
respo_t2 ~1 4.326 4.220 4.432 8.609 79.971 0.000
d_respo_1 ~~ d_respo_1 0.031 -0.026 0.089 0.850 1.077 0.282
respo_t2 ~~ d_respo_1 -0.006 -0.051 0.039 -0.071 -0.267 0.789
respo_t2 ~ frequ 0.177 0.054 0.301 0.260 2.821 0.005
d_respo_1 ~ frequ -0.101 -0.201 -0.001 -0.387 -1.985 0.047
frequ ~~ frequ 0.542 0.363 0.720 1.000 5.948 0.000

The moderation effect of the frequency of self-acceptance behaviors with the responsibility change score from T2 to T3 (ideal-self) is not significantly different from zero (at p < .001), b = -0.101, p = 0.047.

6.7.7.19 Anxiety - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6846.576 6930.502 0.943 0.044 0.055
# parameters of interest
params_lcs_anxie_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t3 ~ anxie_t2", "d_anxie_1 =~ anxie_t3", "anxie_t2 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", "d_anxie_1 ~ sa07_10_t1", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t2 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t3 ~ anxie_t2 1.000 1.000 1.000 0.915 NA NA
d_anxie_1 =~ anxie_t3 1.000 1.000 1.000 0.159 NA NA
d_anxie_1 ~1 -0.088 -0.174 -0.003 -2.222 -2.026 0.043
anxie_t2 ~1 4.587 4.476 4.698 19.994 81.000 0.000
d_anxie_1 ~~ d_anxie_1 0.001 -0.019 0.020 0.387 0.062 0.950
anxie_t2 ~~ d_anxie_1 0.005 -0.011 0.020 0.807 0.590 0.555
d_anxie_1 ~ sa07_10_t1 0.021 -0.002 0.045 0.783 1.781 0.075
sa07_10_t1 ~~ sa07_10_t1 2.149 1.932 2.366 1.000 19.408 0.000

The moderation effect of the facet-specific acceptance goal with the anxiety change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.021, p = 0.075.

6.7.7.20 Anxiety - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 8209.513 8318.982 0.984 0.025 0.051
# parameters of interest
params_lcs_anxie_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_anxie_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t3 ~ anxie_t2", "d_anxie_1 =~ anxie_t3", "anxie_t2 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t2 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t2 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t3 ~ anxie_t2 1.000 1.000 1.000 0.915 NA NA
d_anxie_1 =~ anxie_t3 1.000 1.000 1.000 0.153 NA NA
d_anxie_1 ~1 -0.017 -0.051 0.018 -0.433 -0.964 0.335
anxie_t2 ~1 4.570 4.496 4.643 19.538 122.080 0.000
d_anxie_1 ~~ d_anxie_1 0.001 -0.019 0.021 0.725 0.107 0.915
anxie_t2 ~~ d_anxie_1 0.005 -0.011 0.021 0.648 0.602 0.547
anxie_t2 ~ frequ 0.030 -0.031 0.091 0.095 0.956 0.339
d_anxie_1 ~ frequ -0.028 -0.089 0.034 -0.524 -0.881 0.378
frequ ~~ frequ 0.547 0.368 0.726 1.000 5.986 0.000

The moderation effect of the frequency of self-acceptance behaviors with the anxiety change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.028, p = 0.378.

6.7.7.21 Depression - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 5366.16 5450.086 0.883 0.077 0.07
# parameters of interest
params_lcs_depre_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t3 ~ depre_t2", "d_depre_1 =~ depre_t3", "depre_t2 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", "d_depre_1 ~ sa07_11_t1", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t2 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t3 ~ depre_t2 1.000 1.000 1.000 1.029 NA NA
d_depre_1 =~ depre_t3 1.000 1.000 1.000 0.519 NA NA
d_depre_1 ~1 0.071 -0.027 0.169 0.412 1.411 0.158
depre_t2 ~1 4.479 4.353 4.605 13.207 69.685 0.000
d_depre_1 ~~ d_depre_1 0.029 -0.008 0.065 0.985 1.553 0.120
depre_t2 ~~ d_depre_1 -0.018 -0.047 0.010 -0.317 -1.255 0.209
d_depre_1 ~ sa07_11_t1 -0.014 -0.042 0.014 -0.121 -1.005 0.315
sa07_11_t1 ~~ sa07_11_t1 2.117 1.909 2.324 1.000 19.977 0.000

The moderation effect of the facet-specific acceptance goal with the depression change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.014, p = 0.315.

6.7.7.22 Depression - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 6729.933 6839.403 0.914 0.068 0.068
# parameters of interest
params_lcs_depre_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_depre_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t3 ~ depre_t2", "d_depre_1 =~ depre_t3", "depre_t2 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t2 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t2 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t3 ~ depre_t2 1.000 1.000 1.000 1.032 NA NA
d_depre_1 =~ depre_t3 1.000 1.000 1.000 0.520 NA NA
d_depre_1 ~1 0.026 -0.020 0.072 0.149 1.115 0.265
depre_t2 ~1 4.441 4.364 4.518 12.719 113.062 0.000
d_depre_1 ~~ d_depre_1 0.029 -0.009 0.068 0.945 1.480 0.139
depre_t2 ~~ d_depre_1 -0.017 -0.047 0.013 -0.288 -1.110 0.267
depre_t2 ~ frequ 0.070 -0.012 0.152 0.147 1.669 0.095
d_depre_1 ~ frequ -0.056 -0.120 0.008 -0.235 -1.716 0.086
frequ ~~ frequ 0.542 0.363 0.720 1.000 5.960 0.000

The moderation effect of the frequency of self-acceptance behaviors with the depression change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.056, p = 0.086.

6.7.7.23 Volatility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6286.275 6370.202 0.97 0.037 0.047
# parameters of interest
params_lcs_volat_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t3 ~ volat_t2", "d_volat_1 =~ volat_t3", "volat_t2 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", "d_volat_1 ~ sa07_12_t1", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t2 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t3 ~ volat_t2 1.000 1.000 1.000 1.016 NA NA
d_volat_1 =~ volat_t3 1.000 1.000 1.000 0.388 NA NA
d_volat_1 ~1 0.044 -0.084 0.171 0.257 0.670 0.503
volat_t2 ~1 1.526 1.378 1.674 3.435 20.199 0.000
d_volat_1 ~~ d_volat_1 0.029 -0.018 0.076 1.000 1.198 0.231
volat_t2 ~~ d_volat_1 -0.018 -0.051 0.016 -0.235 -1.035 0.301
d_volat_1 ~ sa07_12_t1 0.002 -0.036 0.041 0.019 0.121 0.904
sa07_12_t1 ~~ sa07_12_t1 1.780 1.584 1.976 1.000 17.813 0.000

The moderation effect of the facet-specific acceptance goal with the volatility change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.002, p = 0.904.

6.7.7.24 Volatility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7696.29 7805.759 0.964 0.043 0.05
# parameters of interest
params_lcs_volat_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_volat_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t3 ~ volat_t2", "d_volat_1 =~ volat_t3", "volat_t2 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t2 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t2 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t3 ~ volat_t2 1.000 1.000 1.000 1.016 NA NA
d_volat_1 =~ volat_t3 1.000 1.000 1.000 0.385 NA NA
d_volat_1 ~1 0.050 -0.004 0.104 0.299 1.828 0.068
volat_t2 ~1 1.618 1.529 1.706 3.656 35.758 0.000
d_volat_1 ~~ d_volat_1 0.027 -0.020 0.074 0.962 1.136 0.256
volat_t2 ~~ d_volat_1 -0.014 -0.047 0.019 -0.197 -0.837 0.403
volat_t2 ~ frequ -0.129 -0.226 -0.032 -0.216 -2.614 0.009
d_volat_1 ~ frequ 0.044 -0.045 0.134 0.194 0.968 0.333
frequ ~~ frequ 0.543 0.365 0.722 1.000 5.960 0.000

The moderation effect of the frequency of self-acceptance behaviors with the volatility change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.044, p = 0.333.

6.7.7.25 Curiosity - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6693.246 6777.172 0.966 0.038 0.049
# parameters of interest
params_lcs_curio_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t3 ~ curio_t2", "d_curio_1 =~ curio_t3", "curio_t2 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", "d_curio_1 ~ sa07_13_t1", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t2 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t3 ~ curio_t2 1.000 1.000 1.000 0.909 NA NA
d_curio_1 =~ curio_t3 1.000 1.000 1.000 0.533 NA NA
d_curio_1 ~1 -0.040 -0.147 0.068 -0.168 -0.723 0.470
curio_t2 ~1 4.637 4.501 4.773 11.483 66.727 0.000
d_curio_1 ~~ d_curio_1 0.056 -0.005 0.117 0.996 1.801 0.072
curio_t2 ~~ d_curio_1 -0.010 -0.049 0.030 -0.102 -0.476 0.634
d_curio_1 ~ sa07_13_t1 0.011 -0.033 0.056 0.064 0.505 0.613
sa07_13_t1 ~~ sa07_13_t1 1.762 1.547 1.978 1.000 16.041 0.000

The moderation effect of the facet-specific acceptance goal with the curiosity change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.011, p = 0.613.

6.7.7.26 Curiosity - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 8113.273 8222.742 0.99 0.022 0.046
# parameters of interest
params_lcs_curio_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_curio_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t3 ~ curio_t2", "d_curio_1 =~ curio_t3", "curio_t2 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t2 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t2 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t3 ~ curio_t2 1.000 1.000 1.000 0.914 NA NA
d_curio_1 =~ curio_t3 1.000 1.000 1.000 0.541 NA NA
d_curio_1 ~1 -0.011 -0.071 0.048 -0.047 -0.369 0.712
curio_t2 ~1 4.489 4.416 4.562 11.231 120.617 0.000
d_curio_1 ~~ d_curio_1 0.054 -0.006 0.114 0.967 1.764 0.078
curio_t2 ~~ d_curio_1 -0.014 -0.054 0.026 -0.152 -0.691 0.489
curio_t2 ~ frequ 0.055 -0.042 0.153 0.103 1.113 0.266
d_curio_1 ~ frequ 0.058 -0.032 0.149 0.183 1.267 0.205
frequ ~~ frequ 0.551 0.372 0.729 1.000 6.038 0.000

The moderation effect of the frequency of self-acceptance behaviors with the curiosity change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.058, p = 0.205.

6.7.7.27 Aesthetic - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6733.907 6817.833 1 0 0.036
# parameters of interest
params_lcs_aesth_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t3 ~ aesth_t2", "d_aesth_1 =~ aesth_t3", "aesth_t2 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", "d_aesth_1 ~ sa07_14_t1", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t2 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t3 ~ aesth_t2 1.000 1.000 1.000 0.950 NA NA
d_aesth_1 =~ aesth_t3 1.000 1.000 1.000 0.575 NA NA
d_aesth_1 ~1 -0.025 -0.083 0.033 -0.156 -0.854 0.393
aesth_t2 ~1 2.592 2.384 2.799 9.662 24.514 0.000
d_aesth_1 ~~ d_aesth_1 0.026 -0.003 0.055 0.988 1.740 0.082
aesth_t2 ~~ d_aesth_1 -0.010 -0.025 0.004 -0.244 -1.388 0.165
d_aesth_1 ~ sa07_14_t1 0.012 -0.011 0.035 0.109 1.047 0.295
sa07_14_t1 ~~ sa07_14_t1 2.046 1.852 2.241 1.000 20.596 0.000

The moderation effect of the facet-specific acceptance goal with the aesthetic change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.012, p = 0.295.

6.7.7.28 Aesthetic - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 8109.692 8219.161 0.987 0.03 0.044
# parameters of interest
params_lcs_aesth_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_aesth_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t3 ~ aesth_t2", "d_aesth_1 =~ aesth_t3", "aesth_t2 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t2 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t2 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t3 ~ aesth_t2 1.000 1.000 1.000 0.950 NA NA
d_aesth_1 =~ aesth_t3 1.000 1.000 1.000 0.577 NA NA
d_aesth_1 ~1 0.009 -0.022 0.040 0.056 0.563 0.573
aesth_t2 ~1 2.702 2.549 2.856 10.229 34.515 0.000
d_aesth_1 ~~ d_aesth_1 0.026 -0.004 0.055 0.994 1.717 0.086
aesth_t2 ~~ d_aesth_1 -0.008 -0.021 0.005 -0.201 -1.204 0.229
aesth_t2 ~ frequ -0.105 -0.184 -0.026 -0.291 -2.594 0.009
d_aesth_1 ~ frequ 0.018 -0.030 0.065 0.080 0.729 0.466
frequ ~~ frequ 0.539 0.360 0.717 1.000 5.905 0.000

The moderation effect of the frequency of self-acceptance behaviors with the aesthetic change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.018, p = 0.466.

6.7.7.29 Imagination - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6371.892 6455.818 0.934 0.056 0.063
# parameters of interest
params_lcs_imagi_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t3 ~ imagi_t2", "d_imagi_1 =~ imagi_t3", "imagi_t2 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", "d_imagi_1 ~ sa07_15_t1", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t2 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t3 ~ imagi_t2 1.000 1.000 1.000 0.944 NA NA
d_imagi_1 =~ imagi_t3 1.000 1.000 1.000 0.481 NA NA
d_imagi_1 ~1 -0.032 -0.156 0.092 -0.134 -0.511 0.609
imagi_t2 ~1 4.732 4.588 4.876 10.023 64.402 0.000
d_imagi_1 ~~ d_imagi_1 0.057 -0.010 0.124 0.980 1.655 0.098
imagi_t2 ~~ d_imagi_1 -0.012 -0.070 0.046 -0.107 -0.394 0.693
d_imagi_1 ~ sa07_15_t1 0.023 -0.021 0.066 0.140 1.030 0.303
sa07_15_t1 ~~ sa07_15_t1 2.182 1.988 2.376 1.000 22.048 0.000

The moderation effect of the facet-specific acceptance goal with the imagination change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.023, p = 0.303.

6.7.7.30 Imagination - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7735.574 7845.043 0.976 0.034 0.052
# parameters of interest
params_lcs_imagi_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_imagi_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t3 ~ imagi_t2", "d_imagi_1 =~ imagi_t3", "imagi_t2 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t2 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t2 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t3 ~ imagi_t2 1.000 1.000 1.000 0.942 NA NA
d_imagi_1 =~ imagi_t3 1.000 1.000 1.000 0.482 NA NA
d_imagi_1 ~1 0.034 -0.033 0.101 0.140 0.991 0.322
imagi_t2 ~1 4.514 4.434 4.594 9.520 110.076 0.000
d_imagi_1 ~~ d_imagi_1 0.059 -0.011 0.129 1.000 1.641 0.101
imagi_t2 ~~ d_imagi_1 -0.015 -0.078 0.047 -0.135 -0.482 0.630
imagi_t2 ~ frequ 0.091 -0.004 0.186 0.142 1.872 0.061
d_imagi_1 ~ frequ 0.004 -0.097 0.105 0.013 0.084 0.933
frequ ~~ frequ 0.544 0.365 0.722 1.000 5.970 0.000

The moderation effect of the frequency of self-acceptance behaviors with the imagination change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.004, p = 0.933.

6.7.8 Big Five facets (current self)

6.7.8.1 Sociability - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7926.536 8014.329 0.961 0.073 0.042
# parameters of interest
params_lcs_socia_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", "d_socia_1 ~ sa07_01_t1", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.076 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.479 NA NA
d_socia_1 ~1 -0.039 -0.237 0.158 -0.089 -0.391 0.696
socia_t1 ~1 4.092 3.789 4.394 4.139 26.497 0.000
d_socia_1 ~~ d_socia_1 0.187 0.099 0.276 0.967 4.169 0.000
socia_t1 ~~ d_socia_1 -0.124 -0.188 -0.060 -0.334 -3.805 0.000
d_socia_1 ~ sa07_01_t1 0.060 0.007 0.113 0.183 2.207 0.027
sa07_01_t1 ~~ sa07_01_t1 1.826 1.634 2.019 1.000 18.622 0.000

The moderation effect of the facet-specific acceptance goal with the sociability change score (current-self) is not significantly different from zero, b = 0.06, p = 0.027.

6.7.8.2 Sociability - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9235.151 9349.664 0.963 0.061 0.043
# parameters of interest
params_lcs_socia_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_socia_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.076 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.478 NA NA
d_socia_1 ~1 0.161 0.078 0.243 0.368 3.797 0.000
socia_t1 ~1 2.858 2.724 2.992 2.917 41.743 0.000
d_socia_1 ~~ d_socia_1 0.189 0.101 0.278 0.998 4.181 0.000
socia_t1 ~~ d_socia_1 -0.160 -0.235 -0.085 -0.375 -4.166 0.000
socia_t1 ~ frequ 0.029 -0.179 0.237 0.022 0.275 0.784
d_socia_1 ~ frequ -0.025 -0.155 0.106 -0.042 -0.374 0.709
frequ ~~ frequ 0.549 0.370 0.728 1.000 6.013 0.000

The moderation effect of the frequency of self-acceptance behaviors with sociability change score (current-self) is not significantly different from zero, b = -0.025, p = 0.709.

6.7.8.3 Assertiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 8078.291 8166.085 0.983 0.041 0.039
# parameters of interest
params_lcs_asser_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", "d_asser_1 ~ sa07_02_t1", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.003 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.372 NA NA
d_asser_1 ~1 -0.031 -0.180 0.118 -0.114 -0.410 0.682
asser_t1 ~1 3.683 3.374 3.992 4.999 23.377 0.000
d_asser_1 ~~ d_asser_1 0.073 0.019 0.127 0.982 2.652 0.008
asser_t1 ~~ d_asser_1 -0.030 -0.074 0.013 -0.161 -1.363 0.173
d_asser_1 ~ sa07_02_t1 0.028 -0.016 0.072 0.135 1.245 0.213
sa07_02_t1 ~~ sa07_02_t1 1.747 1.573 1.921 1.000 19.717 0.000

The moderation effect of the facet-specific acceptance goal with the assertiveness change score (current-self) is not significantly different from zero, b = 0.028, p = 0.213.

6.7.8.4 Assertiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9341.854 9456.368 0.988 0.031 0.042
# parameters of interest
params_lcs_asser_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_asser_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.996 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.369 NA NA
d_asser_1 ~1 0.054 -0.002 0.111 0.208 1.875 0.061
asser_t1 ~1 3.105 2.986 3.224 4.407 51.115 0.000
d_asser_1 ~~ d_asser_1 0.066 0.016 0.115 0.965 2.613 0.009
asser_t1 ~~ d_asser_1 -0.036 -0.078 0.007 -0.199 -1.642 0.101
asser_t1 ~ frequ 0.101 -0.060 0.263 0.105 1.228 0.219
d_asser_1 ~ frequ 0.067 -0.025 0.159 0.188 1.428 0.153
frequ ~~ frequ 0.534 0.352 0.716 1.000 5.748 0.000

The moderation effect of the frequency of self-acceptance behaviors with assertiveness change score (current-self) is not significantly different from zero, b = 0.067, p = 0.153.

6.7.8.5 Energy - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 8193.783 8281.577 0.987 0.034 0.045
# parameters of interest
params_lcs_energ_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", "d_energ_1 ~ sa07_03_t1", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.018 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.488 NA NA
d_energ_1 ~1 0.019 -0.065 0.103 0.106 0.442 0.658
energ_t1 ~1 2.210 1.987 2.433 5.911 19.436 0.000
d_energ_1 ~~ d_energ_1 0.032 0.002 0.061 0.978 2.084 0.037
energ_t1 ~~ d_energ_1 -0.014 -0.030 0.002 -0.236 -1.656 0.098
d_energ_1 ~ sa07_03_t1 -0.019 -0.044 0.005 -0.147 -1.554 0.120
sa07_03_t1 ~~ sa07_03_t1 1.851 1.650 2.052 1.000 18.028 0.000

The moderation effect of the facet-specific acceptance goal with the energy change score (current-self) is not significantly different from zero, b = -0.019, p = 0.12.

6.7.8.6 Energy - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9491.901 9606.415 0.984 0.033 0.051
# parameters of interest
params_lcs_energ_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_energ_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.019 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.487 NA NA
d_energ_1 ~1 -0.047 -0.087 -0.007 -0.257 -2.328 0.020
energ_t1 ~1 2.676 2.564 2.789 6.934 46.622 0.000
d_energ_1 ~~ d_energ_1 0.034 0.001 0.066 0.986 2.040 0.041
energ_t1 ~~ d_energ_1 -0.021 -0.042 0.001 -0.291 -1.846 0.065
energ_t1 ~ frequ -0.048 -0.142 0.046 -0.091 -0.998 0.318
d_energ_1 ~ frequ -0.029 -0.083 0.025 -0.116 -1.061 0.289
frequ ~~ frequ 0.543 0.365 0.720 1.000 5.994 0.000

The moderation effect of the frequency of self-acceptance behaviors with the energy change score (current-self) is not significantly different from zero, b = -0.029, p = 0.289.

6.7.8.7 Compassion - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 8053.413 8141.206 0.972 0.045 0.045
# parameters of interest
params_lcs_compa_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", "d_compa_1 ~ sa07_04_t1", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.893 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.554 NA NA
d_compa_1 ~1 0.105 -0.031 0.241 0.277 1.519 0.129
compa_t1 ~1 4.546 4.397 4.694 7.408 60.131 0.000
d_compa_1 ~~ d_compa_1 0.143 0.046 0.241 0.991 2.894 0.004
compa_t1 ~~ d_compa_1 -0.032 -0.095 0.032 -0.144 -0.978 0.328
d_compa_1 ~ sa07_04_t1 -0.025 -0.083 0.033 -0.093 -0.838 0.402
sa07_04_t1 ~~ sa07_04_t1 2.024 1.813 2.235 1.000 18.799 0.000

The moderation effect of the facet-specific acceptance goal with the compassion change score (current-self) is not significantly different from zero, b = -0.025, p = 0.402.

6.7.8.8 Compassion - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9270.387 9384.9 0.973 0.041 0.05
# parameters of interest
params_lcs_compa_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_compa_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.897 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.551 NA NA
d_compa_1 ~1 0.051 -0.021 0.123 0.130 1.380 0.168
compa_t1 ~1 4.213 4.123 4.303 6.594 91.762 0.000
d_compa_1 ~~ d_compa_1 0.154 0.048 0.259 0.998 2.846 0.004
compa_t1 ~~ d_compa_1 -0.025 -0.091 0.040 -0.103 -0.754 0.451
compa_t1 ~ frequ 0.172 0.036 0.307 0.197 2.478 0.013
d_compa_1 ~ frequ -0.023 -0.148 0.102 -0.042 -0.354 0.723
frequ ~~ frequ 0.540 0.360 0.720 1.000 5.888 0.000

The moderation effect of the frequency of self-acceptance behaviors with the compassion change score (current-self) is not significantly different from zero, b = -0.023, p = 0.723.

6.7.8.9 Respectfulness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 6959.501 7047.295 0.967 0.052 0.054
# parameters of interest
params_lcs_respe_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", "d_respe_1 ~ sa07_05_t1", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.999 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.629 NA NA
d_respe_1 ~1 0.126 0.020 0.232 0.383 2.334 0.020
respe_t1 ~1 4.734 4.616 4.852 9.044 78.428 0.000
d_respe_1 ~~ d_respe_1 0.104 0.028 0.179 0.955 2.703 0.007
respe_t1 ~~ d_respe_1 -0.067 -0.117 -0.018 -0.429 -2.663 0.008
d_respe_1 ~ sa07_05_t1 -0.053 -0.107 0.002 -0.212 -1.891 0.059
sa07_05_t1 ~~ sa07_05_t1 1.744 1.473 2.015 1.000 12.613 0.000

The facet-specific acceptance goal significantly moderates changes in respectfulness (current-self) between T1 and T2 (but also not at p < .001 …), b = -0.053, p = 0.059.

6.7.8.10 Respectfulness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8263.913 8378.426 0.965 0.049 0.065
# parameters of interest
params_lcs_respe_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respe_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.997 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.629 NA NA
d_respe_1 ~1 0.024 -0.034 0.081 0.072 0.809 0.418
respe_t1 ~1 4.444 4.374 4.514 8.477 124.257 0.000
d_respe_1 ~~ d_respe_1 0.109 0.025 0.192 0.992 2.551 0.011
respe_t1 ~~ d_respe_1 -0.055 -0.106 -0.004 -0.319 -2.104 0.035
respe_t1 ~ frequ 0.053 -0.056 0.161 0.074 0.955 0.340
d_respe_1 ~ frequ 0.041 -0.049 0.131 0.092 0.899 0.369
frequ ~~ frequ 0.543 0.365 0.721 1.000 5.972 0.000

The moderation effect of the frequency of self-acceptance behaviors with the respectfulness change score (current-self) is not significantly different from zero, b = 0.041, p = 0.369.

6.7.8.11 Trust - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 8321.353 8409.146 0.966 0.051 0.049
# parameters of interest
params_lcs_trust_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", "d_trust_1 ~ sa07_06_t1", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.040 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.314 NA NA
d_trust_1 ~1 0.066 -0.078 0.210 0.308 0.900 0.368
trust_t1 ~1 2.489 2.274 2.705 3.508 22.676 0.000
d_trust_1 ~~ d_trust_1 0.038 -0.032 0.109 0.833 1.066 0.287
trust_t1 ~~ d_trust_1 -0.025 -0.081 0.031 -0.186 -0.873 0.382
d_trust_1 ~ sa07_06_t1 -0.063 -0.115 -0.012 -0.409 -2.403 0.016
sa07_06_t1 ~~ sa07_06_t1 1.909 1.711 2.108 1.000 18.829 0.000

The moderation effect of the facet-specific acceptance goal with the trust change score (current-self) is not significantly different from zero (at p < .001), b = -0.063, p = 0.016.

6.7.8.12 Trust - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9551.319 9665.832 0.963 0.049 0.063
# parameters of interest
params_lcs_trust_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_trust_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.038 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.312 NA NA
d_trust_1 ~1 -0.094 -0.163 -0.025 -0.445 -2.683 0.007
trust_t1 ~1 2.849 2.732 2.967 4.035 47.461 0.000
d_trust_1 ~~ d_trust_1 0.044 -0.028 0.116 0.976 1.193 0.233
trust_t1 ~~ d_trust_1 -0.042 -0.100 0.016 -0.288 -1.432 0.152
trust_t1 ~ frequ -0.083 -0.242 0.076 -0.086 -1.020 0.308
d_trust_1 ~ frequ -0.045 -0.150 0.061 -0.154 -0.826 0.409
frequ ~~ frequ 0.541 0.363 0.719 1.000 5.946 0.000

The moderation effect of the frequency of self-acceptance behaviors with the trust change score (current-self) is not significantly different from zero, b = -0.045, p = 0.409.

6.7.8.13 Organization - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7915.149 8002.942 1 0 0.023
# parameters of interest
params_lcs_organ_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", "d_organ_1 ~ sa07_07_t1", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.003 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.507 NA NA
d_organ_1 ~1 -0.030 -0.207 0.147 -0.064 -0.334 0.739
organ_t1 ~1 1.826 1.549 2.103 1.950 12.916 0.000
d_organ_1 ~~ d_organ_1 0.224 0.113 0.335 0.999 3.955 0.000
organ_t1 ~~ d_organ_1 -0.105 -0.182 -0.029 -0.290 -2.703 0.007
d_organ_1 ~ sa07_07_t1 -0.012 -0.067 0.042 -0.037 -0.438 0.661
sa07_07_t1 ~~ sa07_07_t1 2.070 1.888 2.251 1.000 22.344 0.000

The moderation effect of the facet-specific acceptance goal with the organization change score (current-self) is not significantly different from zero, b = -0.012, p = 0.661.

6.7.8.14 Organization - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9211.576 9326.089 1 0 0.029
# parameters of interest
params_lcs_organ_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_organ_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.003 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.509 NA NA
d_organ_1 ~1 -0.065 -0.146 0.016 -0.139 -1.568 0.117
organ_t1 ~1 2.963 2.828 3.098 3.229 43.056 0.000
d_organ_1 ~~ d_organ_1 0.216 0.108 0.324 0.998 3.925 0.000
organ_t1 ~~ d_organ_1 -0.113 -0.195 -0.032 -0.268 -2.726 0.006
organ_t1 ~ frequ -0.180 -0.377 0.017 -0.144 -1.788 0.074
d_organ_1 ~ frequ -0.025 -0.152 0.102 -0.040 -0.387 0.699
frequ ~~ frequ 0.543 0.365 0.722 1.000 5.969 0.000

The moderation effect of the frequency of self-acceptance behaviors with the organization change score (current-self) is not significantly different from zero, b = -0.025, p = 0.699.

6.7.8.15 Productiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7795.129 7882.923 0.966 0.061 0.043
# parameters of interest
params_lcs_produ_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", "d_produ_1 ~ sa07_08_t1", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.962 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.540 NA NA
d_produ_1 ~1 -0.023 -0.195 0.149 -0.058 -0.261 0.794
produ_t1 ~1 2.428 2.131 2.725 3.453 16.029 0.000
d_produ_1 ~~ d_produ_1 0.154 0.078 0.230 0.989 3.954 0.000
produ_t1 ~~ d_produ_1 -0.041 -0.090 0.009 -0.182 -1.616 0.106
d_produ_1 ~ sa07_08_t1 -0.031 -0.081 0.020 -0.107 -1.198 0.231
sa07_08_t1 ~~ sa07_08_t1 1.880 1.691 2.069 1.000 19.477 0.000

The moderation effect of the facet-specific acceptance goal with the productiveness change score (current-self) is not significantly different from zero, b = -0.031, p = 0.231.

6.7.8.16 Productiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9108.876 9223.39 0.968 0.051 0.051
# parameters of interest
params_lcs_produ_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_produ_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.960 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.541 NA NA
d_produ_1 ~1 -0.127 -0.201 -0.053 -0.323 -3.361 0.001
produ_t1 ~1 3.428 3.300 3.556 4.921 52.346 0.000
d_produ_1 ~~ d_produ_1 0.151 0.075 0.227 0.978 3.879 0.000
produ_t1 ~~ d_produ_1 -0.062 -0.118 -0.005 -0.231 -2.150 0.032
produ_t1 ~ frequ -0.135 -0.293 0.024 -0.141 -1.669 0.095
d_produ_1 ~ frequ -0.080 -0.193 0.033 -0.149 -1.385 0.166
frequ ~~ frequ 0.533 0.352 0.715 1.000 5.764 0.000

The moderation effect of the frequency of self-acceptance behaviors with the productiveness change score (current-self) is not significantly different from zero, b = -0.08, p = 0.166.

6.7.8.17 Responsibility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7947.26 8035.053 0.893 0.099 0.085
# parameters of interest
params_lcs_respo_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", "d_respo_1 ~ sa07_09_t1", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.017 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.509 NA NA
d_respo_1 ~1 -0.026 -0.093 0.042 -0.143 -0.749 0.454
respo_t1 ~1 3.994 3.819 4.170 11.074 44.576 0.000
d_respo_1 ~~ d_respo_1 0.032 0.001 0.063 0.980 2.001 0.045
respo_t1 ~~ d_respo_1 -0.014 -0.031 0.003 -0.248 -1.578 0.114
d_respo_1 ~ sa07_09_t1 0.018 -0.008 0.044 0.141 1.333 0.183
sa07_09_t1 ~~ sa07_09_t1 2.069 1.860 2.278 1.000 19.415 0.000

The moderation effect of the facet-specific acceptance goal with the responsibility change score (current-self) is not significantly different from zero, b = 0.018, p = 0.183.

6.7.8.18 Responsibility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9213.842 9328.355 0.895 0.087 0.088
# parameters of interest
params_lcs_respo_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respo_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.015 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.507 NA NA
d_respo_1 ~1 0.019 -0.017 0.056 0.106 1.045 0.296
respo_t1 ~1 3.659 3.557 3.760 9.957 70.684 0.000
d_respo_1 ~~ d_respo_1 0.034 0.000 0.067 0.999 1.978 0.048
respo_t1 ~~ d_respo_1 -0.019 -0.039 0.002 -0.278 -1.804 0.071
respo_t1 ~ frequ 0.028 -0.061 0.116 0.056 0.617 0.537
d_respo_1 ~ frequ -0.009 -0.060 0.042 -0.035 -0.335 0.737
frequ ~~ frequ 0.549 0.371 0.728 1.000 6.019 0.000

The moderation effect of the frequency of self-acceptance behaviors with the responsibility change score (current-self) is not significantly different from zero, b = -0.009, p = 0.737.

6.7.8.19 Anxiety - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 8155.146 8242.94 1 0 0.027
# parameters of interest
params_lcs_anxie_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", "d_anxie_1 ~ sa07_10_t1", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.983 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.430 NA NA
d_anxie_1 ~1 0.212 0.001 0.424 0.518 1.967 0.049
anxie_t1 ~1 3.815 3.514 4.116 4.071 24.832 0.000
d_anxie_1 ~~ d_anxie_1 0.168 0.072 0.264 0.999 3.427 0.001
anxie_t1 ~~ d_anxie_1 -0.074 -0.147 0.000 -0.213 -1.968 0.049
d_anxie_1 ~ sa07_10_t1 -0.008 -0.063 0.047 -0.029 -0.293 0.769
sa07_10_t1 ~~ sa07_10_t1 2.115 1.921 2.308 1.000 21.431 0.000

The moderation effect of the facet-specific acceptance goal with the anxiety change score (current-self) is not significantly different from zero, b = -0.008, p = 0.769.

6.7.8.20 Anxiety - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9385.887 9500.4 0.99 0.028 0.043
# parameters of interest
params_lcs_anxie_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_anxie_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.982 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.428 NA NA
d_anxie_1 ~1 0.189 0.104 0.274 0.457 4.370 0.000
anxie_t1 ~1 2.876 2.745 3.008 3.027 42.816 0.000
d_anxie_1 ~~ d_anxie_1 0.155 0.060 0.251 0.903 3.188 0.001
anxie_t1 ~~ d_anxie_1 -0.048 -0.131 0.036 -0.129 -1.114 0.265
anxie_t1 ~ frequ -0.223 -0.395 -0.050 -0.176 -2.529 0.011
d_anxie_1 ~ frequ 0.172 0.041 0.304 0.312 2.565 0.010
frequ ~~ frequ 0.563 0.381 0.745 1.000 6.055 0.000

The moderation effect of the frequency of self-acceptance behaviors with the anxiety change score (current-self) is not significantly different from zero (at p < .001), b = 0.172, p = 0.01.

6.7.8.21 Depression - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 8058.315 8146.108 0.954 0.077 0.06
# parameters of interest
params_lcs_depre_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", "d_depre_1 ~ sa07_11_t1", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.987 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.508 NA NA
d_depre_1 ~1 0.094 -0.006 0.194 0.329 1.838 0.066
depre_t1 ~1 3.571 3.375 3.767 6.424 35.660 0.000
d_depre_1 ~~ d_depre_1 0.081 0.044 0.119 0.997 4.261 0.000
depre_t1 ~~ d_depre_1 -0.033 -0.055 -0.010 -0.232 -2.853 0.004
d_depre_1 ~ sa07_11_t1 0.011 -0.019 0.041 0.055 0.708 0.479
sa07_11_t1 ~~ sa07_11_t1 2.106 1.918 2.294 1.000 21.989 0.000

The moderation effect of the facet-specific acceptance goal with the depression change score (current-self) is not significantly different from zero, b = 0.011, p = 0.479.

6.7.8.22 Depression - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9302.558 9417.072 0.955 0.066 0.066
# parameters of interest
params_lcs_depre_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_depre_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.985 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.505 NA NA
d_depre_1 ~1 0.127 0.073 0.180 0.446 4.646 0.000
depre_t1 ~1 3.025 2.908 3.142 5.448 50.721 0.000
d_depre_1 ~~ d_depre_1 0.076 0.040 0.112 0.940 4.169 0.000
depre_t1 ~~ d_depre_1 -0.031 -0.056 -0.006 -0.205 -2.429 0.015
depre_t1 ~ frequ -0.089 -0.199 0.020 -0.119 -1.594 0.111
d_depre_1 ~ frequ 0.094 0.016 0.172 0.245 2.368 0.018
frequ ~~ frequ 0.550 0.370 0.730 1.000 5.985 0.000

The moderation effect of the frequency of self-acceptance behaviors with the depression change score (current-self) is not significantly different from zero (at p < .001), b = 0.094, p = 0.018.

6.7.8.23 Volatility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 8162.721 8250.515 0.99 0.032 0.037
# parameters of interest
params_lcs_volat_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", "d_volat_1 ~ sa07_12_t1", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.057 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.452 NA NA
d_volat_1 ~1 0.030 -0.154 0.215 0.075 0.322 0.747
volat_t1 ~1 2.236 1.963 2.508 2.357 16.086 0.000
d_volat_1 ~~ d_volat_1 0.159 0.065 0.252 0.965 3.319 0.001
volat_t1 ~~ d_volat_1 -0.098 -0.175 -0.021 -0.288 -2.481 0.013
d_volat_1 ~ sa07_12_t1 -0.058 -0.120 0.004 -0.187 -1.847 0.065
sa07_12_t1 ~~ sa07_12_t1 1.709 1.531 1.887 1.000 18.847 0.000

The moderation effect of the facet-specific acceptance goal with the volatility change score (current-self) is not significantly different from zero, b = -0.058, p = 0.065.

6.7.8.24 Volatility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9468.703 9583.217 0.985 0.035 0.045
# parameters of interest
params_lcs_volat_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_volat_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.056 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.450 NA NA
d_volat_1 ~1 -0.133 -0.213 -0.053 -0.327 -3.266 0.001
volat_t1 ~1 3.119 2.986 3.251 3.272 45.993 0.000
d_volat_1 ~~ d_volat_1 0.165 0.069 0.260 1.000 3.386 0.001
volat_t1 ~~ d_volat_1 -0.130 -0.208 -0.051 -0.335 -3.252 0.001
volat_t1 ~ frequ 0.068 -0.118 0.254 0.053 0.714 0.475
d_volat_1 ~ frequ 0.008 -0.123 0.139 0.015 0.119 0.906
frequ ~~ frequ 0.555 0.373 0.737 1.000 5.976 0.000

The moderation effect of the frequency of self-acceptance behaviors with the volatility change score (current-self) is significantly different from zero, b = 0.008, p = 0.906.

6.7.8.25 Curiosity - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7851.661 7939.454 0.982 0.038 0.047
# parameters of interest
params_lcs_curio_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", "d_curio_1 ~ sa07_13_t1", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.085 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 NA NA NA
d_curio_1 ~1 -0.041 -0.126 0.043 NA -0.962 0.336
curio_t1 ~1 4.376 4.210 4.542 7.657 51.627 0.000
d_curio_1 ~~ d_curio_1 -0.015 -0.053 0.023 NA -0.793 0.428
curio_t1 ~~ d_curio_1 -0.008 -0.040 0.025 -0.113 -0.455 0.649
d_curio_1 ~ sa07_13_t1 0.044 0.011 0.076 NA 2.645 0.008
sa07_13_t1 ~~ sa07_13_t1 1.724 1.530 1.918 1.000 17.438 0.000

The moderation effect of the facet-specific acceptance goal with the curiosity change score (current-self) is not significantly different from zero (at p < .001), b = 0.044, p = 0.008.

6.7.8.26 Curiosity - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9121.411 9235.924 0.991 0.025 0.04
# parameters of interest
params_lcs_curio_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_curio_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.084 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 NA NA NA
d_curio_1 ~1 0.060 0.013 0.106 NA 2.530 0.011
curio_t1 ~1 4.032 3.933 4.131 7.155 79.542 0.000
d_curio_1 ~~ d_curio_1 -0.014 -0.050 0.023 NA -0.724 0.469
curio_t1 ~~ d_curio_1 -0.020 -0.054 0.014 -0.304 -1.156 0.248
curio_t1 ~ frequ 0.089 -0.024 0.201 0.116 1.539 0.124
d_curio_1 ~ frequ 0.047 -0.024 0.119 NA 1.300 0.194
frequ ~~ frequ 0.541 0.364 0.719 1.000 5.972 0.000

The moderation effect of the frequency of self-acceptance behaviors with the curiosity change score (current-self) is not significantly different from zero, b = 0.047, p = 0.194.

6.7.8.27 Aesthetic - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 8194.758 8282.551 1 0 0.037
# parameters of interest
params_lcs_aesth_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", "d_aesth_1 ~ sa07_14_t1", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.996 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.377 NA NA
d_aesth_1 ~1 -0.006 -0.059 0.046 -0.050 -0.240 0.810
aesth_t1 ~1 2.615 2.433 2.798 7.680 28.028 0.000
d_aesth_1 ~~ d_aesth_1 0.017 -0.005 0.039 0.999 1.485 0.137
aesth_t1 ~~ d_aesth_1 -0.008 -0.021 0.004 -0.201 -1.320 0.187
d_aesth_1 ~ sa07_14_t1 0.003 -0.017 0.023 0.031 0.281 0.779
sa07_14_t1 ~~ sa07_14_t1 2.002 1.823 2.180 1.000 21.957 0.000

The moderation effect of the facet-specific acceptance goal with the aesthetic change score (current-self) is not significantly different from zero, b = 0.003, p = 0.779.

6.7.8.28 Aesthetic - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9407.546 9522.059 0.982 0.037 0.045
# parameters of interest
params_lcs_aesth_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_aesth_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.998 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.379 NA NA
d_aesth_1 ~1 0.001 -0.027 0.029 0.010 0.085 0.932
aesth_t1 ~1 2.848 2.725 2.970 8.538 45.482 0.000
d_aesth_1 ~~ d_aesth_1 0.015 -0.005 0.036 0.940 1.444 0.149
aesth_t1 ~~ d_aesth_1 -0.011 -0.024 0.003 -0.267 -1.489 0.136
aesth_t1 ~ frequ -0.121 -0.201 -0.040 -0.265 -2.932 0.003
d_aesth_1 ~ frequ -0.042 -0.094 0.009 -0.245 -1.606 0.108
frequ ~~ frequ 0.539 0.360 0.718 1.000 5.894 0.000

The moderation effect of the frequency of self-acceptance behaviors with the aesthetic change score (current-self) is not significantly different from zero, b = -0.042, p = 0.108.

6.7.8.29 Imagination - specific, facet-level acceptance goal as moderator of change

Results summary (*sa07_$$_t1* = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7895.793 7983.587 0.939 0.074 0.056
# parameters of interest
params_lcs_imagi_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", "d_imagi_1 ~ sa07_15_t1", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.073 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.436 NA NA
d_imagi_1 ~1 0.051 -0.077 0.179 0.187 0.781 0.435
imagi_t1 ~1 4.273 4.093 4.452 6.370 46.676 0.000
d_imagi_1 ~~ d_imagi_1 0.073 -0.024 0.169 0.978 1.469 0.142
imagi_t1 ~~ d_imagi_1 -0.054 -0.118 0.010 -0.339 -1.655 0.098
d_imagi_1 ~ sa07_15_t1 0.028 -0.019 0.075 0.148 1.150 0.250
sa07_15_t1 ~~ sa07_15_t1 2.135 1.956 2.314 1.000 23.329 0.000

The moderation effect of the facet-specific acceptance goal with the imagination change score (current-self) is not significantly different from zero, b = 0.028, p = 0.25.

6.7.8.30 Imagination - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9129.832 9244.345 0.952 0.058 0.056
# parameters of interest
params_lcs_imagi_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_imagi_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.067 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.427 NA NA
d_imagi_1 ~1 0.132 0.071 0.194 0.485 4.201 0.000
imagi_t1 ~1 3.641 3.536 3.745 5.343 68.382 0.000
d_imagi_1 ~~ d_imagi_1 0.074 -0.027 0.175 0.998 1.444 0.149
imagi_t1 ~~ d_imagi_1 -0.066 -0.145 0.012 -0.360 -1.656 0.098
imagi_t1 ~ frequ 0.122 -0.024 0.268 0.131 1.635 0.102
d_imagi_1 ~ frequ 0.015 -0.096 0.126 0.041 0.271 0.787
frequ ~~ frequ 0.537 0.357 0.717 1.000 5.841 0.000

The moderation effect of the frequency of self-acceptance behaviors with the imagination change score (current-self) is not significantly different from zero, b = 0.015, p = 0.787.

6.7.9 Hyp 7: Effects summary

6.7.9.1 Summary: Ideal self

Collect all relevant effects:

Show the code
# create df for table:

# main effects (change score)
df_table_hyp7_main <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp7_mod <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp7 <- df_table_hyp7_main %>% left_join(df_table_hyp7_mod)

Results summary across the Big Five traits: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion goals -0.020 -0.076 0.438 -0.031 -0.103 0.390
extraversion frequency -0.019 -0.072 0.465 0.009 0.026 0.823
agreeableness goals 0.006 0.021 0.795 -0.012 -0.040 0.682
agreeableness frequency 0.006 0.023 0.770 0.029 0.078 0.422
conscientiousness goals 0.026 0.081 0.273 -0.039 -0.132 0.118
conscientiousness frequency 0.027 0.085 0.248 0.057 0.131 0.111
neuroticism goals -0.007 -0.019 0.817 -0.010 -0.027 0.741
neuroticism frequency -0.006 -0.018 0.821 0.027 0.057 0.569
openness goals 0.014 0.068 0.381 0.020 0.073 0.344
openness frequency 0.015 0.069 0.368 0.009 0.032 0.717

No moderator effects at the domain level that are significantly different from zero at p < .001:

  • Only at p < .05: The frequency of self-acceptance behaviors moderates changes in ideal-level conscientiousness.

Results summary across the Big Five facets: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability goals 0.101 0.532 0.214 -0.048 -0.341 0.034
sociability frequency -0.062 -0.320 0.048 -0.022 -0.086 0.639
assertiveness goals -0.102 -0.621 0.152 0.023 0.189 0.231
assertiveness frequency -0.026 -0.155 0.312 -0.010 -0.046 0.800
energy goals -0.002 -0.010 0.967 0.001 0.010 0.915
energy frequency 0.000 -0.002 0.986 -0.023 -0.096 0.409
compassion goals -0.001 -0.003 0.991 0.007 0.029 0.821
compassion frequency 0.020 0.053 0.646 0.000 -0.001 0.996
respectfulness goals 0.007 0.046 0.854 -0.004 -0.036 0.820
respectfulness frequency -0.001 -0.006 0.968 0.031 0.157 0.348
trust goals 0.010 0.035 0.890 -0.009 -0.047 0.697
trust frequency -0.015 -0.056 0.626 -0.061 -0.165 0.232
organization goals -0.067 -0.255 0.338 0.020 0.112 0.334
organization frequency -0.005 -0.019 0.860 -0.003 -0.009 0.947
productiveness goals -0.114 -0.476 0.051 0.025 0.146 0.141
productiveness frequency -0.029 -0.123 0.216 -0.072 -0.219 0.053
responsibility goals 0.070 0.263 0.167 -0.021 -0.113 0.272
responsibility frequency 0.018 0.066 0.512 0.067 0.181 0.105
anxiety goals 0.028 0.110 0.696 -0.003 -0.014 0.890
anxiety frequency 0.020 0.079 0.508 -0.073 -0.210 0.135
depression goals 0.020 0.074 0.746 -0.004 -0.024 0.804
depression frequency 0.006 0.022 0.821 -0.031 -0.084 0.472
volatility goals 0.108 0.424 0.093 -0.042 -0.216 0.064
volatility frequency -0.009 -0.034 0.788 -0.031 -0.090 0.545
curiosity goals -0.035 -0.165 0.446 0.022 0.138 0.222
curiosity frequency 0.017 0.081 0.540 0.025 0.090 0.520
aesthetic goals -0.008 -0.047 0.772 -0.004 -0.037 0.646
aesthetic frequency -0.019 -0.117 0.252 -0.020 -0.091 0.470
imagination goals 0.025 0.076 0.683 -0.013 -0.056 0.566
imagination frequency -0.012 -0.035 0.717 -0.029 -0.066 0.580

No moderator effects at the facet level that are significantly different from zero at p < .001:

  • Only at p < .05: The facet-specific acceptance goal moderates changes in ideal-level sociability (opposite direction of effect).
  • Only at p < .05: The frequency of self-acceptance behaviors moderates changes in ideal-level trust (opposite direction of effect).
  • Only at p < .05: The frequency of self-acceptance behaviors moderates changes in ideal-level productiveness (opposite direction of effect).
  • Only at p < .05: The frequency of self-acceptance behaviors moderates changes in ideal-level responsibility.

Prepare data frame for plotting:

Show the code
df_table_hyp7_plot <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp7_plot <- df_table_hyp7_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("ideal", levels = c("ideal"), labels = c("ideal"))) %>% 
  mutate(moderator = factor(moderator, levels = c("goals", "frequency"), labels = c("goals", "frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • ideal = ideal-level personality
  • goals = specific, facet-level acceptance goal(s) as moderator
  • frequency = frequency of self-acceptance behavior as moderator
Show the code
ggplot(df_table_hyp7_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.7.9.2 Summary: Current self

Collect all relevant effects:

Show the code
# create df for table:

# main effects (change score)
df_table_hyp7_curr_main <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_curr_frequ_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_curr_specif_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_curr_frequ_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_curr_specif_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_curr_frequ_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_curr_specif_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_curr_frequ_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_curr_specif_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_curr_frequ_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_curr_specif_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_curr_frequ_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_curr_specif_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_curr_frequ_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_curr_specif_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_curr_frequ_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_curr_specif_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_curr_frequ_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_curr_specif_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_curr_frequ_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_curr_specif_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_curr_frequ_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_curr_specif_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_curr_frequ_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_curr_specif_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_curr_frequ_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_curr_specif_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_curr_frequ_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_curr_specif_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_curr_frequ_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_curr_specif_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_curr_frequ_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_curr_specif_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_curr_frequ_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_curr_specif_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_curr_frequ_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_curr_specif_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_curr_frequ_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_curr_specif_hyp7 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_curr_frequ_hyp7 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp7_curr_mod <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_curr_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_curr_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_curr_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_curr_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_curr_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_curr_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_curr_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_curr_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_curr_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_curr_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_curr_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_curr_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp7_curr <- df_table_hyp7_curr_main %>% left_join(df_table_hyp7_curr_mod)

Results summary across the Big Five traits: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7_curr[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion goals 0.092 0.345 0.000 0.038 0.139 0.244
extraversion frequency 0.089 0.342 0.000 0.038 0.108 0.310
agreeableness goals 0.024 0.120 0.175 -0.034 -0.163 0.154
agreeableness frequency 0.027 0.129 0.144 0.030 0.109 0.321
conscientiousness goals 0.074 0.212 0.004 0.029 0.092 0.253
conscientiousness frequency 0.074 0.213 0.004 0.027 0.057 0.478
neuroticism goals -0.176 -0.474 0.000 -0.007 -0.018 0.824
neuroticism frequency -0.176 -0.472 0.000 -0.111 -0.221 0.018
openness goals 0.075 0.317 0.001 0.039 0.130 0.201
openness frequency 0.076 0.317 0.001 0.055 0.168 0.179

No moderation effects at the domain level that are significantly different from zero at p < .001:

  • Only at p < .05: The frequency of self-acceptance behaviors moderates changes in current-level neuroticism.

Results summary across the Big Five facets: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7_curr[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability goals -0.039 -0.089 0.696 0.060 0.183 0.027
sociability frequency 0.161 0.368 0.000 -0.025 -0.042 0.709
assertiveness goals -0.031 -0.114 0.682 0.028 0.135 0.213
assertiveness frequency 0.054 0.208 0.061 0.067 0.188 0.153
energy goals 0.019 0.106 0.658 -0.019 -0.147 0.120
energy frequency -0.047 -0.257 0.020 -0.029 -0.116 0.289
compassion goals 0.105 0.277 0.129 -0.025 -0.093 0.402
compassion frequency 0.051 0.130 0.168 -0.023 -0.042 0.723
respectfulness goals 0.126 0.383 0.020 -0.053 -0.212 0.059
respectfulness frequency 0.024 0.072 0.418 0.041 0.092 0.369
trust goals 0.066 0.308 0.368 -0.063 -0.409 0.016
trust frequency -0.094 -0.445 0.007 -0.045 -0.154 0.409
organization goals -0.030 -0.064 0.739 -0.012 -0.037 0.661
organization frequency -0.065 -0.139 0.117 -0.025 -0.040 0.699
productiveness goals -0.023 -0.058 0.794 -0.031 -0.107 0.231
productiveness frequency -0.127 -0.323 0.001 -0.080 -0.149 0.166
responsibility goals -0.026 -0.143 0.454 0.018 0.141 0.183
responsibility frequency 0.019 0.106 0.296 -0.009 -0.035 0.737
anxiety goals 0.212 0.518 0.049 -0.008 -0.029 0.769
anxiety frequency 0.189 0.457 0.000 0.172 0.312 0.010
depression goals 0.094 0.329 0.066 0.011 0.055 0.479
depression frequency 0.127 0.446 0.000 0.094 0.245 0.018
volatility goals 0.030 0.075 0.747 -0.058 -0.187 0.065
volatility frequency -0.133 -0.327 0.001 0.008 0.015 0.906
curiosity goals -0.041 NA 0.336 0.044 NA 0.008
curiosity frequency 0.060 NA 0.011 0.047 NA 0.194
aesthetic goals -0.006 -0.050 0.810 0.003 0.031 0.779
aesthetic frequency 0.001 0.010 0.932 -0.042 -0.245 0.108
imagination goals 0.051 0.187 0.435 0.028 0.148 0.250
imagination frequency 0.132 0.485 0.000 0.015 0.041 0.787

No moderation effects at the facet level that are significantly different from zero at p < .001:

  • Only at p < .01: The facet-specific acceptance goal moderates changes in current-level respectfulness.
  • Only at p < .05: The facet-specific acceptance goal moderates changes in current-level trust.
  • Only at p < .05: The frequency of self-acceptance behaviors moderates changes in current-level anxiety.
  • Only at p < .05: The frequency of self-acceptance behaviors moderates changes in current-level depression.
  • Only at p < .05: The facet-specific acceptance goal moderates changes in current-level curiosity.

Prepare data frame for plotting:

Show the code
df_table_hyp7_plot_curr <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_curr_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_curr_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_curr_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_curr_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_curr_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_curr_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_curr_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_curr_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_curr_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_curr_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_curr_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_curr_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp7_plot_curr <- df_table_hyp7_plot_curr %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("current", levels = c("current"), labels = c("current"))) %>% 
  mutate(moderator = factor(moderator, levels = c("goals", "frequency"), labels = c("goals", "frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • current = current-level personality
  • goals = specific, facet-level acceptance goal(s) as moderator
  • frequency = frequency of self-acceptance behavior as moderator
Show the code
ggplot(df_table_hyp7_plot_curr, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")


6.8 Differences in change across experimental groups (Hyp 6 in paper)

Change in psychological well-being indicators as well as the difference between real- and ideal-self will differ across groups at follow-up. Based on exploratory results from Study 1, we expect that the self-acceptance intervention leads to more pronounced well-being gains and less pronounced differences between current- and ideal-self personality compared to the self-improvement intervention.

6.8.1 Well-being change: differences across groups

6.8.1.1 Life satisfaction

Life satisfaction: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_swls_group_config <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2a", "lamb2b")*sw06_02_t1 + c("lamb3a", "lamb3b")*sw06_03_t1 + c("lamb4a", "lamb4b")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2a", "lamb2b")*sw06_02_t2 + c("lamb3a", "lamb3b")*sw06_03_t2 + c("lamb4a", "lamb4b")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T2
'
lcs_swls_group_config <- sem(mi_lcs_swls_group_config, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', 
                             fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_swls_group_weak <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2", "lamb2")*sw06_02_t1 + c("lamb3", "lamb3")*sw06_03_t1 + c("lamb4", "lamb4")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2", "lamb2")*sw06_02_t2 + c("lamb3", "lamb3")*sw06_03_t2 + c("lamb4", "lamb4")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T2
'

lcs_swls_group_weak <- sem(mi_lcs_swls_group_weak, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_swls_group_strong <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2", "lamb2")*sw06_02_t1 + c("lamb3", "lamb3")*sw06_03_t1 + c("lamb4", "lamb4")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2", "lamb2")*sw06_02_t2 + c("lamb3", "lamb3")*sw06_03_t2 + c("lamb4", "lamb4")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4", "m4")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4", "m4")*1     # This estimates the intercept of X4 at T2
'

lcs_swls_group_strong <- sem(mi_lcs_swls_group_strong, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Life satisfaction: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_swls_group_config, lcs_swls_group_weak, lcs_swls_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                      Df   AIC   BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_swls_group_config 50 13077 13248 125.00                              
lcs_swls_group_weak   53 13073 13231 127.59     3.1604       3     0.3675
lcs_swls_group_strong 58 13066 13202 130.93     3.3369       5     0.6482
# show model with varying latent change parameters 
# -> key parameter is "d_swls_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
kable(broom::tidy(lcs_swls_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_swls_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_swls_1 ~1 d_int_a 0.246 0.419 5.644 0
d_swls_1 ~1 d_int_b 0.296 0.415 6.155 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_swls_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_swls_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_swls_1 ~1 d_int 0.267 0.454 8.195 0
d_swls_1 ~1 d_int 0.267 0.374 8.195 0

Slightly more positive change in life satisfaction in the Self-Acceptance group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_swls_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 57 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        58
  Number of equality constraints                    23

  Number of observations per group:               Used       Total
    Self-Acceptance                                336         336
    Self-Improvement                               337         338
  Number of missing patterns per group:                           
    Self-Acceptance                                  2            
    Self-Improvement                                 2            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                               127.587     114.982
  Degrees of freedom                                53          53
  P-value (Chi-square)                           0.000       0.000
  Scaling correction factor                                  1.110
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             68.718      61.929
    Self-Improvement                            58.869      53.053

Model Test Baseline Model:

  Test statistic                              3183.172    2343.602
  Degrees of freedom                                56          56
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.358

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.976       0.973
  Tucker-Lewis Index (TLI)                       0.975       0.971
                                                                  
  Robust Comparative Fit Index (CFI)                         0.978
  Robust Tucker-Lewis Index (TLI)                            0.977

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -6501.579   -6501.579
  Scaling correction factor                                  0.703
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -6437.786   -6437.786
  Scaling correction factor                                  1.132
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               13073.158   13073.158
  Bayesian (BIC)                             13231.070   13231.070
  Sample-size adjusted Bayesian (SABIC)      13119.942   13119.942

Root Mean Square Error of Approximation:

  RMSEA                                          0.065       0.059
  90 Percent confidence interval - lower         0.050       0.045
  90 Percent confidence interval - upper         0.079       0.073
  P-value H_0: RMSEA <= 0.050                    0.046       0.140
  P-value H_0: RMSEA >= 0.080                    0.040       0.006
                                                                  
  Robust RMSEA                                               0.065
  90 Percent confidence interval - lower                     0.048
  90 Percent confidence interval - upper                     0.082
  P-value H_0: Robust RMSEA <= 0.050                         0.073
  P-value H_0: Robust RMSEA >= 0.080                         0.068

Standardized Root Mean Square Residual:

  SRMR                                           0.035       0.035

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 =~                                                            
    s06_01_           1.000                               0.993    0.839
    s06_02_ (lmb2)    0.885    0.029   30.812    0.000    0.879    0.775
    s06_03_ (lmb3)    1.038    0.031   33.314    0.000    1.031    0.858
    s06_04_ (lmb4)    0.909    0.031   29.375    0.000    0.903    0.721
  swls_t2 =~                                                            
    s06_01_           1.000                               1.052    0.853
    s06_02_ (lmb2)    0.885    0.029   30.812    0.000    0.931    0.793
    s06_03_ (lmb3)    1.038    0.031   33.314    0.000    1.092    0.870
    s06_04_ (lmb4)    0.909    0.031   29.375    0.000    0.956    0.741
  d_swls_1 =~                                                           
    swls_t2           1.000                               0.559    0.559

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t2 ~                                                             
    swls_t1           1.000                               0.944    0.944

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 ~~                                                            
    d_swl_1 (fb_a)   -0.113    0.040   -2.791    0.005   -0.193   -0.193
 .sw06_01_t1 ~~                                                         
   .s06_01_ (cov1)    0.050    0.044    1.136    0.256    0.050    0.121
 .sw06_02_t1 ~~                                                         
   .s06_02_ (cov2)    0.210    0.043    4.924    0.000    0.210    0.408
 .sw06_03_t1 ~~                                                         
   .s06_03_ (cov3)    0.034    0.040    0.859    0.390    0.034    0.089
 .sw06_04_t1 ~~                                                         
   .s06_04_ (cov4)    0.289    0.064    4.514    0.000    0.289    0.384

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_n_)    0.246    0.044    5.644    0.000    0.419    0.419
    swls_t1 (wb__)    2.742    0.062   43.993    0.000    2.761    2.761
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2a)    0.499    0.098    5.078    0.000    0.499    0.440
   .s06_03_  (m3a)    0.025    0.102    0.250    0.803    0.025    0.021
   .s06_04_  (m4a)    0.420    0.103    4.096    0.000    0.420    0.336
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2a)    0.499    0.098    5.078    0.000    0.499    0.425
   .s06_03_  (m3a)    0.025    0.102    0.250    0.803    0.025    0.020
   .s06_04_  (m4a)    0.420    0.103    4.096    0.000    0.420    0.326

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_v_)    0.345    0.057    6.039    0.000    1.000    1.000
    swls_t1 (wb__)    0.986    0.075   13.185    0.000    1.000    1.000
   .s06_01_ (res1)    0.414    0.044    9.393    0.000    0.414    0.296
   .s06_02_ (res2)    0.513    0.040   12.737    0.000    0.513    0.399
   .s06_03_ (res3)    0.381    0.038   10.087    0.000    0.381    0.264
   .s06_04_ (res4)    0.752    0.061   12.251    0.000    0.752    0.480
   .s06_01_ (res1)    0.414    0.044    9.393    0.000    0.414    0.272
   .s06_02_ (res2)    0.513    0.040   12.737    0.000    0.513    0.372
   .s06_03_ (res3)    0.381    0.038   10.087    0.000    0.381    0.242
   .s06_04_ (res4)    0.752    0.061   12.251    0.000    0.752    0.451


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 =~                                                            
    s06_01_           1.000                               0.982    0.815
    s06_02_ (lmb2)    0.885    0.029   30.812    0.000    0.869    0.739
    s06_03_ (lmb3)    1.038    0.031   33.314    0.000    1.019    0.851
    s06_04_ (lmb4)    0.909    0.031   29.375    0.000    0.892    0.706
  swls_t2 =~                                                            
    s06_01_           1.000                               0.958    0.809
    s06_02_ (lmb2)    0.885    0.029   30.812    0.000    0.848    0.731
    s06_03_ (lmb3)    1.038    0.031   33.314    0.000    0.994    0.845
    s06_04_ (lmb4)    0.909    0.031   29.375    0.000    0.871    0.697
  d_swls_1 =~                                                           
    swls_t2           1.000                               0.745    0.745

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t2 ~                                                             
    swls_t1           1.000                               1.025    1.025

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 ~~                                                            
    d_swl_1 (fb_b)   -0.278    0.058   -4.758    0.000   -0.397   -0.397
 .sw06_01_t1 ~~                                                         
   .s06_01_ (cv1b)    0.132    0.044    2.974    0.003    0.132    0.272
 .sw06_02_t1 ~~                                                         
   .s06_02_ (cv2b)    0.297    0.057    5.231    0.000    0.297    0.474
 .sw06_03_t1 ~~                                                         
   .s06_03_ (cv3b)    0.068    0.043    1.582    0.114    0.068    0.173
 .sw06_04_t1 ~~                                                         
   .s06_04_ (cv4b)    0.320    0.066    4.823    0.000    0.320    0.400

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_n_)    0.296    0.048    6.155    0.000    0.415    0.415
    swls_t1 (wb__)    2.629    0.063   41.512    0.000    2.679    2.679
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2b)    0.533    0.094    5.691    0.000    0.533    0.453
   .s06_03_  (m3b)    0.106    0.098    1.088    0.277    0.106    0.089
   .s06_04_  (m4b)    0.429    0.102    4.202    0.000    0.429    0.339
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2b)    0.533    0.094    5.691    0.000    0.533    0.459
   .s06_03_  (m3b)    0.106    0.098    1.088    0.277    0.106    0.090
   .s06_04_  (m4b)    0.429    0.102    4.202    0.000    0.429    0.344

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_v_)    0.509    0.082    6.182    0.000    1.000    1.000
    swls_t1 (wb__)    0.963    0.075   12.868    0.000    1.000    1.000
   .s06_01_ (rs1b)    0.485    0.050    9.762    0.000    0.485    0.335
   .s06_02_ (rs2b)    0.627    0.056   11.267    0.000    0.627    0.454
   .s06_03_ (rs3b)    0.395    0.039   10.203    0.000    0.395    0.276
   .s06_04_ (rs4b)    0.800    0.063   12.669    0.000    0.800    0.501
   .s06_01_ (rs1b)    0.485    0.050    9.762    0.000    0.485    0.346
   .s06_02_ (rs2b)    0.627    0.056   11.267    0.000    0.627    0.466
   .s06_03_ (rs3b)    0.395    0.039   10.203    0.000    0.395    0.286
   .s06_04_ (rs4b)    0.800    0.063   12.669    0.000    0.800    0.514
6.8.1.2 Meaning in life

Meaning in life: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_meaning_group_config <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2a", "lamb2b")*meaning_par2_t1 + c("lamb3a", "lamb3b")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2a", "lamb2b")*meaning_par2_t2 + c("lamb3a", "lamb3b")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_meaning_group_config <- sem(mi_lcs_meaning_group_config, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_meaning_group_weak <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2", "lamb2")*meaning_par2_t1 + c("lamb3", "lamb3")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2", "lamb2")*meaning_par2_t2 + c("lamb3", "lamb3")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_meaning_group_weak <- sem(mi_lcs_meaning_group_weak, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_meaning_group_strong <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2", "lamb2")*meaning_par2_t1 + c("lamb3", "lamb3")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2", "lamb2")*meaning_par2_t2 + c("lamb3", "lamb3")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_meaning_group_strong <- sem(mi_lcs_meaning_group_strong, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Meaning in life: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_meaning_group_config, lcs_meaning_group_weak, lcs_meaning_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                         Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_meaning_group_config 24 9552.9 9688.3 49.776                              
lcs_meaning_group_weak   26 9550.4 9676.8 51.287     1.5699       2     0.4561
lcs_meaning_group_strong 30 9543.8 9652.0 52.632     1.3465       4     0.8534
# show model with varying latent change parameters 
# -> key parameter is "d_meaning_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
kable(broom::tidy(lcs_meaning_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_meaning_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_meaning_1 ~1 d_int_a 0.196 0.321 4.679 0
d_meaning_1 ~1 d_int_b 0.230 0.319 4.855 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_meaning_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_meaning_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_meaning_1 ~1 d_int 0.211 0.344 6.659 0
d_meaning_1 ~1 d_int 0.211 0.292 6.659 0

Slightly more positive change in meaning in life in the Self-Improvement group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_meaning_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 58 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                336         336
    Self-Improvement                               337         338
  Number of missing patterns per group:                           
    Self-Acceptance                                  2            
    Self-Improvement                                 2            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                51.287      46.282
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.002       0.008
  Scaling correction factor                                  1.108
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             29.436      26.563
    Self-Improvement                            21.851      19.719

Model Test Baseline Model:

  Test statistic                              2949.985    2233.784
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.321

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.991       0.991
  Tucker-Lewis Index (TLI)                       0.990       0.989
                                                                  
  Robust Comparative Fit Index (CFI)                         0.992
  Robust Tucker-Lewis Index (TLI)                            0.990

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4747.211   -4747.211
  Scaling correction factor                                  0.749
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -4721.568   -4721.568
  Scaling correction factor                                  1.144
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                9550.422    9550.422
  Bayesian (BIC)                              9676.751    9676.751
  Sample-size adjusted Bayesian (SABIC)       9587.848    9587.848

Root Mean Square Error of Approximation:

  RMSEA                                          0.054       0.048
  90 Percent confidence interval - lower         0.032       0.026
  90 Percent confidence interval - upper         0.075       0.069
  P-value H_0: RMSEA <= 0.050                    0.361       0.529
  P-value H_0: RMSEA >= 0.080                    0.021       0.005
                                                                  
  Robust RMSEA                                               0.055
  90 Percent confidence interval - lower                     0.028
  90 Percent confidence interval - upper                     0.080
  P-value H_0: Robust RMSEA <= 0.050                         0.351
  P-value H_0: Robust RMSEA >= 0.080                         0.047

Standardized Root Mean Square Residual:

  SRMR                                           0.033       0.033

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 =~                                                         
    mnn_1_1           1.000                               1.002    0.814
    mnn_2_1 (lmb2)    1.201    0.035   34.437    0.000    1.204    0.929
    mnn_3_1 (lmb3)    1.168    0.035   33.501    0.000    1.170    0.885
  meaning_t2 =~                                                         
    mnn_1_2           1.000                               0.958    0.802
    mnn_2_2 (lmb2)    1.201    0.035   34.437    0.000    1.151    0.923
    mnn_3_2 (lmb3)    1.168    0.035   33.501    0.000    1.119    0.877
  d_meaning_1 =~                                                        
    mnng_t2           1.000                               0.638    0.638

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t2 ~                                                          
    meaning_t1        1.000                               1.045    1.045

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 ~~                                                           
    d_mnn_1 (fb_a)     -0.230    0.048   -4.744    0.000   -0.375   -0.375
 .meaning_par1_t1 ~~                                                      
   .mnn_1_2 (cov1)      0.207    0.043    4.842    0.000    0.207    0.406
 .meaning_par2_t1 ~~                                                      
   .mnn_2_2 (cov2)      0.027    0.033    0.830    0.407    0.027    0.118
 .meaning_par3_t1 ~~                                                      
   .mnn_3_2 (cov3)      0.153    0.038    4.081    0.000    0.153    0.406

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_n_)    0.196    0.042    4.679    0.000    0.321    0.321
    mnng_t1 (wb__)    3.210    0.064   50.291    0.000    3.204    3.204
   .mnn_1_1           0.000                               0.000    0.000
   .mnn_2_1  (m2a)   -0.048    0.121   -0.393    0.695   -0.048   -0.037
   .mnn_3_1  (m3a)   -0.116    0.118   -0.985    0.324   -0.116   -0.088
   .mnn_1_2           0.000                               0.000    0.000
   .mnn_2_2  (m2a)   -0.048    0.121   -0.393    0.695   -0.048   -0.038
   .mnn_3_2  (m3a)   -0.116    0.118   -0.985    0.324   -0.116   -0.091

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_v_)    0.374    0.067    5.571    0.000    1.000    1.000
    mnng_t1 (wb__)    1.004    0.096   10.450    0.000    1.000    1.000
   .mnn_1_1 (res1)    0.510    0.040   12.813    0.000    0.510    0.337
   .mnn_2_1 (res2)    0.230    0.035    6.582    0.000    0.230    0.137
   .mnn_3_1 (res3)    0.377    0.038    9.898    0.000    0.377    0.216
   .mnn_1_2 (res1)    0.510    0.040   12.813    0.000    0.510    0.357
   .mnn_2_2 (res2)    0.230    0.035    6.582    0.000    0.230    0.148
   .mnn_3_2 (res3)    0.377    0.038    9.898    0.000    0.377    0.232


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 =~                                                         
    mnn_1_1           1.000                               0.951    0.786
    mnn_2_1 (lmb2)    1.201    0.035   34.437    0.000    1.142    0.902
    mnn_3_1 (lmb3)    1.168    0.035   33.501    0.000    1.110    0.854
  meaning_t2 =~                                                         
    mnn_1_2           1.000                               0.958    0.788
    mnn_2_2 (lmb2)    1.201    0.035   34.437    0.000    1.151    0.903
    mnn_3_2 (lmb3)    1.168    0.035   33.501    0.000    1.119    0.856
  d_meaning_1 =~                                                        
    mnng_t2           1.000                               0.753    0.753

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t2 ~                                                          
    meaning_t1        1.000                               0.992    0.992

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 ~~                                                           
    d_mnn_1 (fb_b)     -0.254    0.055   -4.640    0.000   -0.369   -0.369
 .meaning_par1_t1 ~~                                                      
   .mnn_1_2 (cv1b)      0.281    0.044    6.434    0.000    0.281    0.502
 .meaning_par2_t1 ~~                                                      
   .mnn_2_2 (cv2b)      0.076    0.040    1.920    0.055    0.076    0.253
 .meaning_par3_t1 ~~                                                      
   .mnn_3_2 (cv3b)      0.137    0.048    2.881    0.004    0.137    0.300

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_n_)    0.230    0.047    4.855    0.000    0.319    0.319
    mnng_t1 (wb__)    3.206    0.060   53.091    0.000    3.371    3.371
   .mnn_1_1           0.000                               0.000    0.000
   .mnn_2_1  (m2b)   -0.036    0.123   -0.289    0.772   -0.036   -0.028
   .mnn_3_1  (m3b)   -0.061    0.122   -0.504    0.615   -0.061   -0.047
   .mnn_1_2           0.000                               0.000    0.000
   .mnn_2_2  (m2b)   -0.036    0.123   -0.289    0.772   -0.036   -0.028
   .mnn_3_2  (m3b)   -0.061    0.122   -0.504    0.615   -0.061   -0.047

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_v_)    0.521    0.076    6.834    0.000    1.000    1.000
    mnng_t1 (wb__)    0.904    0.085   10.690    0.000    1.000    1.000
   .mnn_1_1 (rs1b)    0.560    0.045   12.505    0.000    0.560    0.382
   .mnn_2_1 (rs2b)    0.300    0.038    7.806    0.000    0.300    0.187
   .mnn_3_1 (rs3b)    0.458    0.049    9.323    0.000    0.458    0.271
   .mnn_1_2 (rs1b)    0.560    0.045   12.505    0.000    0.560    0.379
   .mnn_2_2 (rs2b)    0.300    0.038    7.806    0.000    0.300    0.185
   .mnn_3_2 (rs3b)    0.458    0.049    9.323    0.000    0.458    0.268
6.8.1.3 Self-esteem

Self-esteem: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_selfes_group_config <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2a", "lamb2b")*selfes_par2_t1 + c("lamb3a", "lamb3b")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2a", "lamb2b")*selfes_par2_t2 + c("lamb3a", "lamb3b")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_selfes_group_config <- sem(mi_lcs_selfes_group_config, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_selfes_group_weak <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2", "lamb2")*selfes_par2_t1 + c("lamb3", "lamb3")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2", "lamb2")*selfes_par2_t2 + c("lamb3", "lamb3")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_selfes_group_weak <- sem(mi_lcs_selfes_group_weak, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_selfes_group_strong <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2", "lamb2")*selfes_par2_t1 + c("lamb3", "lamb3")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2", "lamb2")*selfes_par2_t2 + c("lamb3", "lamb3")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_selfes_group_strong <- sem(mi_lcs_selfes_group_strong, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Meaning in life: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_selfes_group_config, lcs_selfes_group_weak, lcs_selfes_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                        Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_selfes_group_config 24 7216.5 7351.9 16.395                              
lcs_selfes_group_weak   26 7213.2 7339.6 17.124    0.76343       2     0.6827
lcs_selfes_group_strong 30 7208.1 7316.4 19.974    2.84132       4     0.5847
# show model with varying latent change parameters 
# -> key parameter is "d_selfes_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
kable(broom::tidy(lcs_selfes_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_selfes_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_selfes_1 ~1 d_int_a 0.240 0.523 7.667 0
d_selfes_1 ~1 d_int_b 0.287 0.570 8.640 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_selfes_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_selfes_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_selfes_1 ~1 d_int 0.264 0.574 11.621 0
d_selfes_1 ~1 d_int 0.264 0.524 11.621 0

Slightly more positive change in self-esteem in the Self-Acceptance group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_selfes_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 72 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                336         336
    Self-Improvement                               337         338
  Number of missing patterns per group:                           
    Self-Acceptance                                  2            
    Self-Improvement                                 2            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                17.124      16.149
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.905       0.933
  Scaling correction factor                                  1.060
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             11.170      10.534
    Self-Improvement                             5.954       5.615

Model Test Baseline Model:

  Test statistic                              3063.748    2410.188
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.271

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000       1.000
  Tucker-Lewis Index (TLI)                       1.003       1.005
                                                                  
  Robust Comparative Fit Index (CFI)                         1.000
  Robust Tucker-Lewis Index (TLI)                            1.004

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3578.624   -3578.624
  Scaling correction factor                                  0.727
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -3570.062   -3570.062
  Scaling correction factor                                  1.103
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                7213.249    7213.249
  Bayesian (BIC)                              7339.578    7339.578
  Sample-size adjusted Bayesian (SABIC)       7250.675    7250.675

Root Mean Square Error of Approximation:

  RMSEA                                          0.000       0.000
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.018       0.010
  P-value H_0: RMSEA <= 0.050                    1.000       1.000
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.000
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.014
  P-value H_0: Robust RMSEA <= 0.050                         0.999
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.024       0.024

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 =~                                                          
    slf_1_1           1.000                               0.733    0.858
    slf_2_1 (lmb2)    1.112    0.035   32.055    0.000    0.815    0.797
    slf_3_1 (lmb3)    1.245    0.029   42.256    0.000    0.913    0.954
  selfes_t2 =~                                                          
    slf_1_2           1.000                               0.747    0.862
    slf_2_2 (lmb2)    1.112    0.035   32.055    0.000    0.831    0.802
    slf_3_2 (lmb3)    1.245    0.029   42.256    0.000    0.930    0.956
  d_selfes_1 =~                                                         
    slfs_t2           1.000                               0.615    0.615

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t2 ~                                                           
    selfes_t1         1.000                               0.982    0.982

Covariances:
                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 ~~                                                           
    d_slf_1 (fb_a)    -0.095    0.023   -4.114    0.000   -0.283   -0.283
 .selfes_par1_t1 ~~                                                      
   .slf_1_2 (cov1)     0.076    0.016    4.662    0.000    0.076    0.394
 .selfes_par2_t1 ~~                                                      
   .slf_2_2 (cov2)     0.176    0.031    5.584    0.000    0.176    0.459
 .selfes_par3_t1 ~~                                                      
   .slf_3_2 (cov3)    -0.035    0.017   -2.100    0.036   -0.035   -0.432

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_n_)    0.240    0.031    7.667    0.000    0.523    0.523
    slfs_t1 (wb__)    3.531    0.046   76.740    0.000    4.815    4.815
   .slf_1_1           0.000                               0.000    0.000
   .slf_2_1  (m2a)   -1.200    0.133   -9.035    0.000   -1.200   -1.173
   .slf_3_1  (m3a)   -1.180    0.114  -10.337    0.000   -1.180   -1.233
   .slf_1_2           0.000                               0.000    0.000
   .slf_2_2  (m2a)   -1.200    0.133   -9.035    0.000   -1.200   -1.159
   .slf_3_2  (m3a)   -1.180    0.114  -10.337    0.000   -1.180   -1.212

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_v_)    0.211    0.033    6.426    0.000    1.000    1.000
    slfs_t1 (wb__)    0.538    0.044   12.136    0.000    1.000    1.000
   .slf_1_1 (res1)    0.192    0.017   11.333    0.000    0.192    0.263
   .slf_2_1 (res2)    0.382    0.032   11.934    0.000    0.382    0.365
   .slf_3_1 (res3)    0.082    0.017    4.799    0.000    0.082    0.089
   .slf_1_2 (res1)    0.192    0.017   11.333    0.000    0.192    0.256
   .slf_2_2 (res2)    0.382    0.032   11.934    0.000    0.382    0.357
   .slf_3_2 (res3)    0.082    0.017    4.799    0.000    0.082    0.086


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 =~                                                          
    slf_1_1           1.000                               0.757    0.880
    slf_2_1 (lmb2)    1.112    0.035   32.055    0.000    0.841    0.807
    slf_3_1 (lmb3)    1.245    0.029   42.256    0.000    0.942    0.929
  selfes_t2 =~                                                          
    slf_1_2           1.000                               0.686    0.859
    slf_2_2 (lmb2)    1.112    0.035   32.055    0.000    0.763    0.778
    slf_3_2 (lmb3)    1.245    0.029   42.256    0.000    0.855    0.916
  d_selfes_1 =~                                                         
    slfs_t2           1.000                               0.734    0.734

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t2 ~                                                           
    selfes_t1         1.000                               1.103    1.103

Covariances:
                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 ~~                                                           
    d_slf_1 (fb_b)    -0.178    0.028   -6.327    0.000   -0.466   -0.466
 .selfes_par1_t1 ~~                                                      
   .slf_1_2 (cv1b)     0.065    0.016    4.023    0.000    0.065    0.388
 .selfes_par2_t1 ~~                                                      
   .slf_2_2 (cv2b)     0.137    0.027    5.051    0.000    0.137    0.359
 .selfes_par3_t1 ~~                                                      
   .slf_3_2 (cv3b)     0.034    0.024    1.433    0.152    0.034    0.246

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_n_)    0.287    0.033    8.640    0.000    0.570    0.570
    slfs_t1 (wb__)    3.548    0.045   78.100    0.000    4.689    4.689
   .slf_1_1           0.000                               0.000    0.000
   .slf_2_1  (m2b)   -1.255    0.130   -9.655    0.000   -1.255   -1.203
   .slf_3_1  (m3b)   -1.185    0.114  -10.411    0.000   -1.185   -1.168
   .slf_1_2           0.000                               0.000    0.000
   .slf_2_2  (m2b)   -1.255    0.130   -9.655    0.000   -1.255   -1.280
   .slf_3_2  (m3b)   -1.185    0.114  -10.411    0.000   -1.185   -1.270

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_v_)    0.254    0.036    6.949    0.000    1.000    1.000
    slfs_t1 (wb__)    0.573    0.044   12.915    0.000    1.000    1.000
   .slf_1_1 (rs1b)    0.167    0.016   10.278    0.000    0.167    0.226
   .slf_2_1 (rs2b)    0.380    0.029   13.294    0.000    0.380    0.350
   .slf_3_1 (rs3b)    0.140    0.025    5.653    0.000    0.140    0.136
   .slf_1_2 (rs1b)    0.167    0.016   10.278    0.000    0.167    0.262
   .slf_2_2 (rs2b)    0.380    0.029   13.294    0.000    0.380    0.395
   .slf_3_2 (rs3b)    0.140    0.025    5.653    0.000    0.140    0.161
6.8.1.4 Self-concept clarity

Self-concept clarity: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_concept_group_config <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2a", "lamb2b")*concept_par2_t1 + c("lamb3a", "lamb3b")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2a", "lamb2b")*concept_par2_t2 + c("lamb3a", "lamb3b")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_concept_group_config <- sem(mi_lcs_concept_group_config, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_concept_group_weak <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2", "lamb2")*concept_par2_t1 + c("lamb3", "lamb3")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2", "lamb2")*concept_par2_t2 + c("lamb3", "lamb3")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_concept_group_weak <- sem(mi_lcs_concept_group_weak, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_concept_group_strong <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2", "lamb2")*concept_par2_t1 + c("lamb3", "lamb3")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2", "lamb2")*concept_par2_t2 + c("lamb3", "lamb3")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_concept_group_strong <- sem(mi_lcs_concept_group_strong, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Meaning in life: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_concept_group_config, lcs_concept_group_weak, lcs_concept_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                         Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_concept_group_config 24 7424.3 7559.7 31.207                              
lcs_concept_group_weak   26 7420.6 7546.9 31.474    0.26259       2     0.8770
lcs_concept_group_strong 30 7413.2 7521.5 32.099    0.62600       4     0.9601
# show model with varying latent change parameters 
# -> key parameter is "d_concept_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
kable(broom::tidy(lcs_concept_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_concept_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_concept_1 ~1 d_int_a 0.168 0.336 5.123 0
d_concept_1 ~1 d_int_b 0.185 0.374 5.700 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_concept_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_concept_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_concept_1 ~1 d_int 0.177 0.353 7.62 0
d_concept_1 ~1 d_int 0.177 0.358 7.62 0

Slightly more positive change in self-concept clarity in the Self-Acceptance group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_concept_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 62 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                336         336
    Self-Improvement                               337         338
  Number of missing patterns per group:                           
    Self-Acceptance                                  2            
    Self-Improvement                                 2            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                31.474      28.712
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.211       0.324
  Scaling correction factor                                  1.096
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             17.734      16.178
    Self-Improvement                            13.740      12.534

Model Test Baseline Model:

  Test statistic                              2887.162    2162.733
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.335

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.998       0.999
  Tucker-Lewis Index (TLI)                       0.998       0.999
                                                                  
  Robust Comparative Fit Index (CFI)                         0.999
  Robust Tucker-Lewis Index (TLI)                            0.999

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3682.288   -3682.288
  Scaling correction factor                                  0.726
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -3666.551   -3666.551
  Scaling correction factor                                  1.119
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                7420.576    7420.576
  Bayesian (BIC)                              7546.905    7546.905
  Sample-size adjusted Bayesian (SABIC)       7458.003    7458.003

Root Mean Square Error of Approximation:

  RMSEA                                          0.025       0.018
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.052       0.047
  P-value H_0: RMSEA <= 0.050                    0.932       0.971
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.020
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.053
  P-value H_0: Robust RMSEA <= 0.050                         0.925
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.022       0.022

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 =~                                                         
    cnc_1_1           1.000                               0.650    0.794
    cnc_2_1 (lmb2)    1.283    0.041   31.361    0.000    0.834    0.869
    cnc_3_1 (lmb3)    1.414    0.042   33.772    0.000    0.919    0.924
  concept_t2 =~                                                         
    cnc_1_2           1.000                               0.663    0.800
    cnc_2_2 (lmb2)    1.283    0.041   31.361    0.000    0.851    0.873
    cnc_3_2 (lmb3)    1.414    0.042   33.772    0.000    0.938    0.927
  d_concept_1 =~                                                        
    cncpt_2           1.000                               0.756    0.756

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t2 ~                                                          
    concept_t1        1.000                               0.980    0.980

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 ~~                                                           
    d_cnc_1 (fb_a)     -0.117    0.025   -4.763    0.000   -0.359   -0.359
 .concept_par1_t1 ~~                                                      
   .cnc_1_2 (cov1)      0.070    0.020    3.400    0.001    0.070    0.281
 .concept_par2_t1 ~~                                                      
   .cnc_2_2 (cov2)      0.086    0.021    4.072    0.000    0.086    0.380
 .concept_par3_t1 ~~                                                      
   .cnc_3_2 (cov3)      0.028    0.022    1.296    0.195    0.028    0.194

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_n_)    0.168    0.033    5.123    0.000    0.336    0.336
    cncpt_1 (wb__)    3.050    0.042   72.638    0.000    4.692    4.692
   .cnc_1_1           0.000                               0.000    0.000
   .cnc_2_1  (m2a)   -0.931    0.138   -6.754    0.000   -0.931   -0.970
   .cnc_3_1  (m3a)   -1.377    0.138   -9.984    0.000   -1.377   -1.384
   .cnc_1_2           0.000                               0.000    0.000
   .cnc_2_2  (m2a)   -0.931    0.138   -6.754    0.000   -0.931   -0.955
   .cnc_3_2  (m3a)   -1.377    0.138   -9.984    0.000   -1.377   -1.361

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_v_)    0.252    0.034    7.500    0.000    1.000    1.000
    cncpt_1 (wb__)    0.423    0.036   11.577    0.000    1.000    1.000
   .cnc_1_1 (res1)    0.248    0.020   12.590    0.000    0.248    0.370
   .cnc_2_1 (res2)    0.227    0.020   11.576    0.000    0.227    0.246
   .cnc_3_1 (res3)    0.144    0.023    6.215    0.000    0.144    0.146
   .cnc_1_2 (res1)    0.248    0.020   12.590    0.000    0.248    0.361
   .cnc_2_2 (res2)    0.227    0.020   11.576    0.000    0.227    0.238
   .cnc_3_2 (res3)    0.144    0.023    6.215    0.000    0.144    0.141


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 =~                                                         
    cnc_1_1           1.000                               0.700    0.802
    cnc_2_1 (lmb2)    1.283    0.041   31.361    0.000    0.899    0.895
    cnc_3_1 (lmb3)    1.414    0.042   33.772    0.000    0.990    0.919
  concept_t2 =~                                                         
    cnc_1_2           1.000                               0.661    0.785
    cnc_2_2 (lmb2)    1.283    0.041   31.361    0.000    0.848    0.885
    cnc_3_2 (lmb3)    1.414    0.042   33.772    0.000    0.934    0.910
  d_concept_1 =~                                                        
    cncpt_2           1.000                               0.750    0.750

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t2 ~                                                          
    concept_t1        1.000                               1.060    1.060

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 ~~                                                           
    d_cnc_1 (fb_b)     -0.150    0.024   -6.142    0.000   -0.432   -0.432
 .concept_par1_t1 ~~                                                      
   .cnc_1_2 (cv1b)      0.072    0.020    3.556    0.000    0.072    0.263
 .concept_par2_t1 ~~                                                      
   .cnc_2_2 (cv2b)      0.063    0.020    3.196    0.001    0.063    0.315
 .concept_par3_t1 ~~                                                      
   .cnc_3_2 (cv3b)      0.037    0.021    1.798    0.072    0.037    0.207

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_n_)    0.185    0.033    5.700    0.000    0.374    0.374
    cncpt_1 (wb__)    3.038    0.045   67.515    0.000    4.337    4.337
   .cnc_1_1           0.000                               0.000    0.000
   .cnc_2_1  (m2b)   -0.899    0.134   -6.729    0.000   -0.899   -0.896
   .cnc_3_1  (m3b)   -1.363    0.135  -10.067    0.000   -1.363   -1.265
   .cnc_1_2           0.000                               0.000    0.000
   .cnc_2_2  (m2b)   -0.899    0.134   -6.729    0.000   -0.899   -0.939
   .cnc_3_2  (m3b)   -1.363    0.135  -10.067    0.000   -1.363   -1.328

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_v_)    0.245    0.037    6.571    0.000    1.000    1.000
    cncpt_1 (wb__)    0.490    0.039   12.493    0.000    1.000    1.000
   .cnc_1_1 (rs1b)    0.273    0.020   13.575    0.000    0.273    0.357
   .cnc_2_1 (rs2b)    0.199    0.021    9.657    0.000    0.199    0.198
   .cnc_3_1 (rs3b)    0.181    0.027    6.668    0.000    0.181    0.156
   .cnc_1_2 (rs1b)    0.273    0.020   13.575    0.000    0.273    0.385
   .cnc_2_2 (rs2b)    0.199    0.021    9.657    0.000    0.199    0.217
   .cnc_3_2 (rs3b)    0.181    0.027    6.668    0.000    0.181    0.172

6.8.2 Current- and ideal-self personality differences across groups

Profile correlations by group and measurement occasion (mixed effects models) - results:

df_sbsa2_t1t2 <- df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(1,2)) %>% mutate(time_d = time - 1)

psych::describeBy(df_sbsa2_t1t2$profile_corr_item_z, list(df_sbsa2_t1t2$rando, df_sbsa2_t1t2$time_d))

 Descriptive statistics by group 
: Self-Acceptance
: 0
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 335 0.42 0.49   0.37    0.38 0.43 -1.09 3.39  4.48 1.14     4.25 0.03
------------------------------------------------------------ 
: Self-Improvement
: 0
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 336 0.42 0.49   0.39     0.4 0.51 -0.89 2.33  3.22 0.47     0.36 0.03
------------------------------------------------------------ 
: Self-Acceptance
: 1
   vars   n mean  sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 284 0.55 0.5   0.52    0.53 0.48 -1.07 2.17  3.23 0.36      0.5 0.03
------------------------------------------------------------ 
: Self-Improvement
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 291 0.56 0.48   0.54    0.55 0.56 -0.62 1.83  2.45 0.19    -0.53 0.03
psych::describeBy(df_sbsa2_t1t2$profile_corr_facet_z, list(df_sbsa2_t1t2$rando, df_sbsa2_t1t2$time_d))

 Descriptive statistics by group 
: Self-Acceptance
: 0
   vars   n mean   sd median trimmed mad   min  max range skew kurtosis   se
X1    1 335 0.35 0.65   0.27    0.31 0.6 -1.07 3.77  4.84 0.93     2.14 0.04
------------------------------------------------------------ 
: Self-Improvement
: 0
   vars   n mean   sd median trimmed mad   min  max range skew kurtosis   se
X1    1 337 0.34 0.67   0.29    0.31 0.7 -1.23 2.53  3.75 0.46     0.04 0.04
------------------------------------------------------------ 
: Self-Acceptance
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 284 0.51 0.67   0.46    0.48 0.66 -1.34 3.09  4.43 0.42     0.32 0.04
------------------------------------------------------------ 
: Self-Improvement
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 292 0.53 0.66   0.49     0.5 0.69 -1.08 2.51   3.6 0.32    -0.32 0.04
lm_profile_corr_item <- lmerTest::lmer(profile_corr_item_z ~ time_d * rando + (1 | pid), data = df_sbsa2_t1t2)
lm_profile_corr_facet <- lmerTest::lmer(profile_corr_facet_z ~ time_d * rando + (1 | pid), data = df_sbsa2_t1t2)

kable(bind_rows(as.data.frame(summary(lm_profile_corr_item)$coefficients), as.data.frame(summary(lm_profile_corr_facet)$coefficients)) %>% as_tibble() %>% mutate(outcome = c(rep("Item-level profile corr.", 4), rep("Facet-level profile corr.", 4)), term = c(rep(c("Intercept", "time", "group", "time*group"), 2))) %>% select(outcome, term, everything()) %>% rename(p = `Pr(>|t|)`), digits = 3)
outcome term Estimate Std. Error df t value p
Item-level profile corr. Intercept 0.418 0.027 845.076 15.580 0.000
Item-level profile corr. time 0.129 0.021 592.195 6.065 0.000
Item-level profile corr. group 0.000 0.038 845.887 -0.012 0.990
Item-level profile corr. time*group 0.007 0.030 591.350 0.242 0.809
Facet-level profile corr. Intercept 0.350 0.036 846.010 9.723 0.000
Facet-level profile corr. time 0.164 0.028 595.605 5.783 0.000
Facet-level profile corr. group -0.008 0.051 846.005 -0.151 0.880
Facet-level profile corr. time*group 0.010 0.040 594.236 0.259 0.796

Squared trait-/facet-differences by group and measurement occasion (mixed effects models) - results:

mod_traits_sqdiff_groups <- df_sbsa2_t1t2 %>% 
  select(pid, time_d, rando, ends_with("_sqdiff")) %>% 
  pivot_longer(ends_with("_sqdiff"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

mod_traits_sqdiff_groups_unlist <- as.data.frame(summary(mod_traits_sqdiff_groups[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(mod_traits_sqdiff_groups)) {
  mod_traits_sqdiff_groups_unlist <- bind_rows(mod_traits_sqdiff_groups_unlist, 
                                               as.data.frame(summary(mod_traits_sqdiff_groups[[i]])$coefficients) %>% as_tibble())
}

kable(mod_traits_sqdiff_groups_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        select(outcome, term, everything()) %>% rename(p = `Pr(>|t|)`) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), 
      digits = 3)
outcome term Estimate Std. Error df t value p
extraversion Intercept 1.753 0.108 768.868 16.160 0.000
extraversion time -0.308 0.083 575.000 -3.693 0.000
extraversion group 0.172 0.152 768.868 1.128 0.259
extraversion time*group -0.126 0.117 575.000 -1.075 0.283
agreeableness Intercept 0.507 0.048 794.537 10.552 0.000
agreeableness time -0.078 0.039 574.000 -1.999 0.046
agreeableness group -0.032 0.067 794.537 -0.477 0.633
agreeableness time*group -0.037 0.055 574.000 -0.678 0.498
conscientiousness Intercept 1.661 0.113 752.187 14.681 0.000
conscientiousness time -0.139 0.084 575.000 -1.662 0.097
conscientiousness group -0.067 0.159 752.187 -0.421 0.674
conscientiousness time*group -0.060 0.117 575.000 -0.510 0.610
neuroticism Intercept 3.363 0.189 766.422 17.764 0.000
neuroticism time -0.636 0.145 575.000 -4.390 0.000
neuroticism group -0.018 0.266 766.422 -0.068 0.946
neuroticism time*group -0.121 0.203 575.000 -0.594 0.553
openness Intercept 0.464 0.048 823.546 9.580 0.000
openness time -0.054 0.042 573.000 -1.288 0.198
openness group 0.002 0.068 823.546 0.029 0.977
openness time*group -0.043 0.059 573.000 -0.738 0.461
sociability Intercept 2.989 0.179 797.073 16.696 0.000
sociability time -0.870 0.147 573.000 -5.907 0.000
sociability group -0.016 0.251 797.073 -0.066 0.948
sociability time*group 0.173 0.207 573.000 0.835 0.404
assertiveness Intercept 1.601 0.130 819.490 12.291 0.000
assertiveness time -0.116 0.112 572.000 -1.034 0.302
assertiveness group 0.304 0.183 819.490 1.663 0.097
assertiveness time*group -0.243 0.157 572.000 -1.540 0.124
energy Intercept 1.976 0.145 870.043 13.607 0.000
energy time -0.244 0.135 574.000 -1.803 0.072
energy group 0.127 0.204 870.043 0.624 0.533
energy time*group -0.182 0.190 574.000 -0.959 0.338
compassion Intercept 0.476 0.059 938.372 8.086 0.000
compassion time -0.053 0.060 574.000 -0.870 0.385
compassion group 0.139 0.083 938.372 1.684 0.093
compassion time*group -0.128 0.085 574.000 -1.511 0.131
respectfulness Intercept 0.520 0.061 825.639 8.474 0.000
respectfulness time 0.007 0.054 571.000 0.130 0.897
respectfulness group -0.025 0.086 825.639 -0.290 0.772
respectfulness time*group -0.038 0.075 571.000 -0.499 0.618
trust Intercept 1.239 0.094 934.116 13.146 0.000
trust time -0.309 0.096 573.000 -3.204 0.001
trust group -0.123 0.133 934.116 -0.930 0.353
trust time*group -0.039 0.136 573.000 -0.289 0.773
organization Intercept 1.852 0.146 796.417 12.680 0.000
organization time -0.143 0.120 574.000 -1.199 0.231
organization group -0.165 0.205 796.417 -0.806 0.421
organization time*group -0.011 0.168 574.000 -0.066 0.947
productiveness Intercept 2.834 0.171 802.138 16.604 0.000
productiveness time -0.355 0.143 571.000 -2.488 0.013
productiveness group 0.018 0.240 802.138 0.074 0.941
productiveness time*group -0.194 0.200 571.000 -0.966 0.335
responsibility Intercept 1.284 0.117 792.347 10.981 0.000
responsibility time -0.048 0.096 572.000 -0.499 0.618
responsibility group 0.060 0.164 792.347 0.364 0.716
responsibility time*group -0.179 0.134 572.000 -1.337 0.182
anxiety Intercept 4.276 0.252 810.764 17.001 0.000
anxiety time -0.620 0.211 575.000 -2.934 0.003
anxiety group 0.051 0.353 810.764 0.144 0.886
anxiety time*group -0.119 0.297 575.000 -0.401 0.689
depression Intercept 3.968 0.220 759.626 18.006 0.000
depression time -0.894 0.167 573.000 -5.356 0.000
depression group -0.076 0.310 759.626 -0.246 0.805
depression time*group 0.013 0.235 573.000 0.056 0.955
volatility Intercept 2.821 0.199 851.931 14.187 0.000
volatility time -0.464 0.180 575.000 -2.580 0.010
volatility group 0.041 0.279 851.931 0.149 0.882
volatility time*group -0.275 0.252 575.000 -1.088 0.277
curiosity Intercept 0.558 0.065 870.775 8.598 0.000
curiosity time -0.087 0.061 572.000 -1.431 0.153
curiosity group -0.003 0.091 870.775 -0.038 0.970
curiosity time*group 0.084 0.085 572.000 0.985 0.325
aesthetic Intercept 0.440 0.054 934.046 8.107 0.000
aesthetic time -0.045 0.056 571.000 -0.804 0.422
aesthetic group 0.011 0.076 934.046 0.150 0.880
aesthetic time*group -0.017 0.078 571.000 -0.211 0.833
imagination Intercept 1.173 0.108 781.107 10.813 0.000
imagination time -0.201 0.086 573.000 -2.333 0.020
imagination group 0.006 0.152 781.107 0.037 0.971
imagination time*group -0.027 0.121 573.000 -0.227 0.821

With both conceptualizations of the similarity / difference of current- and ideal-level personality (profile correlations / squared differences), we find no significant effects of group (at T1) or of interaction effects of group by measurement occasion (at T2).

6.8.3 Latent change: differences in personality change

6.8.3.1 Run models

Adapt latent change score model from above (but without any moderation) and add grouping factor in estimation (adding vectorized equality constraints to the model step by step):

Show the code
# create templates:

# configural invariance
trait_template_main_config <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2a", "lamb2b")*ind02_t1 + c("lamb3a", "lamb3b")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2a", "lamb2b")*ind02_t2 + c("lamb3a", "lamb3b")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int_a", "d_int_b")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int_a", "b5_int_b")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional and the moderation effect on the change score

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

# weak invariance
trait_template_main_weak <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2", "lamb2")*ind02_t1 + c("lamb3", "lamb3")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2", "lamb2")*ind02_t2 + c("lamb3", "lamb3")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int_a", "d_int_b")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int_a", "b5_int_b")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional and the moderation effect on the change score

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

# strong invariance
trait_template_main_strong <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2", "lamb2")*ind02_t1 + c("lamb3", "lamb3")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2", "lamb2")*ind02_t2 + c("lamb3", "lamb3")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int", "d_int")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int", "b5_int")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional and the moderation effect on the change score

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

# strict invariance -> not really needed for this analysis

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # configural - current
  template_filled_config_current <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_config_current <- lavaan(template_filled_config_current, 
                                          data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_config_current")), template_filled_config_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_config_current")), trait_main_fit_config_current))
  # configural - ideal
  template_filled_config_ideal <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_config_ideal <- lavaan(template_filled_config_ideal, 
                                        data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_config_ideal")), template_filled_config_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_config_ideal")), trait_main_fit_config_ideal))
  # weak - current
  template_filled_weak_current <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_weak_current <- lavaan(template_filled_weak_current, 
                                          data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_weak_current")), template_filled_weak_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_weak_current")), trait_main_fit_weak_current))
  # weak - ideal
  template_filled_weak_ideal <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_weak_ideal <- lavaan(template_filled_weak_ideal, 
                                        data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_weak_ideal")), template_filled_weak_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_weak_ideal")), trait_main_fit_weak_ideal))
  # strong - current
  template_filled_strong_current <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_strong_current <- lavaan(template_filled_strong_current, 
                                          data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_strong_current")), template_filled_strong_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_strong_current")), trait_main_fit_strong_current))
  # strong - ideal
  template_filled_strong_ideal <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_strong_ideal <- lavaan(template_filled_strong_ideal, 
                                        data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_strong_ideal")), template_filled_strong_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_strong_ideal")), trait_main_fit_strong_ideal))
}
6.8.3.2 Current self personality traits

Extraversion (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_main_config_current, fit_lcs_extra_main_weak_current, fit_lcs_extra_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_main_config_current 24 7146.6 7282.0 53.117                   
fit_lcs_extra_main_weak_current   26 7143.3 7269.6 53.765    0.62163       2
fit_lcs_extra_main_strong_current 30 7137.3 7245.6 55.770    2.00804       4
                                  Pr(>Chisq)
fit_lcs_extra_main_config_current           
fit_lcs_extra_main_weak_current       0.7328
fit_lcs_extra_main_strong_current     0.7343
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_extra_current <- broom::tidy(fit_lcs_extra_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_extra_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_extra_1 ~1 d_int_a 0.091 0.345 4.059 0
d_extra_1 ~1 d_int_b 0.090 0.322 3.653 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int 0.09 0.340 5.195 0
d_extra_1 ~1 d_int 0.09 0.321 5.195 0

Very similar change in extraversion in both groups. No significant differences according to the LRTs.

Agreeableness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_main_config_current, fit_lcs_agree_main_weak_current, fit_lcs_agree_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_main_config_current 24 5825.7 5961.1 19.373                   
fit_lcs_agree_main_weak_current   26 5822.4 5948.8 20.038    0.64885       2
fit_lcs_agree_main_strong_current 30 5815.3 5923.6 20.936    0.88490       4
                                  Pr(>Chisq)
fit_lcs_agree_main_config_current           
fit_lcs_agree_main_weak_current       0.7229
fit_lcs_agree_main_strong_current     0.9267
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_agree_current <- broom::tidy(fit_lcs_agree_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_agree_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_agree_1 ~1 d_int_a 0.027 0.130 1.481 0.139
d_agree_1 ~1 d_int_b 0.020 0.098 1.103 0.270
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int 0.023 0.109 1.774 0.076
d_agree_1 ~1 d_int 0.023 0.114 1.774 0.076

Similar change in agreeableness in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

Conscientiousness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_main_config_current, fit_lcs_consc_main_weak_current, fit_lcs_consc_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_main_config_current 24 6334.0 6469.4 27.962                   
fit_lcs_consc_main_weak_current   26 6333.8 6460.2 31.801     4.1607       2
fit_lcs_consc_main_strong_current 30 6332.5 6440.8 38.436     6.5293       4
                                  Pr(>Chisq)
fit_lcs_consc_main_config_current           
fit_lcs_consc_main_weak_current       0.1249
fit_lcs_consc_main_strong_current     0.1630
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_consc_current <- broom::tidy(fit_lcs_consc_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_consc_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_consc_1 ~1 d_int_a 0.076 0.211 2.849 0.004
d_consc_1 ~1 d_int_b 0.101 0.252 3.582 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.088 0.243 4.466 0
d_consc_1 ~1 d_int 0.088 0.220 4.466 0

Similar change in conscientiousness in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

neuroticism (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_main_config_current, fit_lcs_neuro_main_weak_current, fit_lcs_neuro_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC  BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_main_config_current 24 6778.6 6914 22.183                   
fit_lcs_neuro_main_weak_current   26 6775.6 6902 23.190     1.1350       2
fit_lcs_neuro_main_strong_current 30 6769.7 6878 25.319     2.1364       4
                                  Pr(>Chisq)
fit_lcs_neuro_main_config_current           
fit_lcs_neuro_main_weak_current       0.5669
fit_lcs_neuro_main_strong_current     0.7107
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_neuro_current <- broom::tidy(fit_lcs_neuro_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_neuro_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_neuro_1 ~1 d_int_a -0.177 -0.474 -6.345 0
d_neuro_1 ~1 d_int_b -0.179 -0.390 -5.609 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int -0.178 -0.474 -8.438 0
d_neuro_1 ~1 d_int -0.178 -0.386 -8.438 0

Similar change in neuroticism in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

Openness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_main_config_current, fit_lcs_openn_main_weak_current, fit_lcs_openn_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_main_config_current 24 6192.9 6328.3 22.020                   
fit_lcs_openn_main_weak_current   26 6196.1 6322.4 29.146     6.6790       2
fit_lcs_openn_main_strong_current 30 6196.0 6304.3 37.047     7.9676       4
                                  Pr(>Chisq)  
fit_lcs_openn_main_config_current             
fit_lcs_openn_main_weak_current      0.03546 *
fit_lcs_openn_main_strong_current    0.09277 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_openn_current <- broom::tidy(fit_lcs_openn_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")) %>% mutate(sig_diff = "*")
kable(params_main_lcs_openn_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_openn_1 ~1 d_int_a 0.076 0.314 3.416 0.001 *
d_openn_1 ~1 d_int_b 0.077 0.295 3.243 0.001 *
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.077 0.316 4.69 0
d_openn_1 ~1 d_int 0.077 0.294 4.69 0

Almost no change in current-self openness in the self-improvement group but significant increase in self-acceptance group. Significant between-group difference in means according to the LRT (at p < .05).

6.8.3.3 Ideal self personality traits

Extraversion (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_main_config_ideal, fit_lcs_extra_main_weak_ideal, fit_lcs_extra_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_main_config_ideal 24 6118.2 6253.6 34.532                   
fit_lcs_extra_main_weak_ideal   26 6116.0 6242.3 36.296     1.5068       2
fit_lcs_extra_main_strong_ideal 30 6109.0 6217.4 37.365     1.0521       4
                                Pr(>Chisq)
fit_lcs_extra_main_config_ideal           
fit_lcs_extra_main_weak_ideal       0.4708
fit_lcs_extra_main_strong_ideal     0.9018
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_extra_ideal <- broom::tidy(fit_lcs_extra_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")) %>% mutate(sig_diff = "**")
kable(params_main_lcs_extra_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_extra_1 ~1 d_int_a -0.018 -0.071 -0.748 0.454 **
d_extra_1 ~1 d_int_b -0.022 -0.086 -0.939 0.348 **
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int -0.02 -0.079 -1.204 0.229
d_extra_1 ~1 d_int -0.02 -0.078 -1.204 0.229

Increase in ideal-self extraversion is significantly higher in the self-acceptance group (n.s. in the self-improvement group).

Agreeableness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_main_config_ideal, fit_lcs_agree_main_weak_ideal, fit_lcs_agree_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_main_config_ideal 24 5819.9 5955.3 32.897                   
fit_lcs_agree_main_weak_ideal   26 5816.2 5942.5 33.204    0.30674       2
fit_lcs_agree_main_strong_ideal 30 5810.7 5919.0 35.765    2.51578       4
                                Pr(>Chisq)
fit_lcs_agree_main_config_ideal           
fit_lcs_agree_main_weak_ideal       0.8578
fit_lcs_agree_main_strong_ideal     0.6418
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_agree_ideal <- broom::tidy(fit_lcs_agree_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_agree_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_agree_1 ~1 d_int_a 0.007 0.023 0.292 0.771
d_agree_1 ~1 d_int_b -0.030 -0.112 -1.357 0.175
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int -0.012 -0.044 -0.793 0.428
d_agree_1 ~1 d_int -0.012 -0.047 -0.793 0.428

Similar change in agreeableness in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

Conscientiousness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_main_config_ideal, fit_lcs_consc_main_weak_ideal, fit_lcs_consc_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_main_config_ideal 24 5019.9 5155.3 23.423                   
fit_lcs_consc_main_weak_ideal   26 5016.1 5142.5 23.669    0.21133       2
fit_lcs_consc_main_strong_ideal 30 5010.0 5118.3 25.547    1.86945       4
                                Pr(>Chisq)
fit_lcs_consc_main_config_ideal           
fit_lcs_consc_main_weak_ideal       0.8997
fit_lcs_consc_main_strong_ideal     0.7598
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_consc_ideal <- broom::tidy(fit_lcs_consc_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_consc_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_consc_1 ~1 d_int_a 0.027 0.086 1.162 0.245
d_consc_1 ~1 d_int_b 0.010 0.036 0.441 0.659
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.018 0.057 1.118 0.264
d_consc_1 ~1 d_int 0.018 0.066 1.118 0.264

Similar change in conscientiousness in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

neuroticism (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_main_config_ideal, fit_lcs_neuro_main_weak_ideal, fit_lcs_neuro_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_main_config_ideal 24 5249.5 5384.9 27.220                   
fit_lcs_neuro_main_weak_ideal   26 5251.1 5377.5 32.857     4.4468       2
fit_lcs_neuro_main_strong_ideal 30 5245.2 5353.5 34.896     2.0381       4
                                Pr(>Chisq)
fit_lcs_neuro_main_config_ideal           
fit_lcs_neuro_main_weak_ideal       0.1082
fit_lcs_neuro_main_strong_ideal     0.7288
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_neuro_ideal <- broom::tidy(fit_lcs_neuro_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_neuro_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_neuro_1 ~1 d_int_a -0.003 -0.010 -0.126 0.900
d_neuro_1 ~1 d_int_b 0.043 0.116 1.552 0.121
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int 0.02 0.058 0.999 0.318
d_neuro_1 ~1 d_int 0.02 0.052 0.999 0.318

Very similar change in neuroticism in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

Openness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_main_config_ideal, fit_lcs_openn_main_weak_ideal, fit_lcs_openn_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_main_config_ideal 24 5955.9 6091.3 45.711                   
fit_lcs_openn_main_weak_ideal   26 5952.8 6079.2 46.574     0.7624       2
fit_lcs_openn_main_strong_ideal 30 5948.8 6057.1 50.566     4.0761       4
                                Pr(>Chisq)
fit_lcs_openn_main_config_ideal           
fit_lcs_openn_main_weak_ideal       0.6831
fit_lcs_openn_main_strong_ideal     0.3958
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_openn_ideal <- broom::tidy(fit_lcs_openn_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_openn_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_openn_1 ~1 d_int_a 0.015 0.071 0.924 0.356
d_openn_1 ~1 d_int_b 0.016 0.112 1.143 0.253
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.016 0.074 1.478 0.139
d_openn_1 ~1 d_int 0.016 0.109 1.478 0.139

Similar change in ideal-self openness in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

6.8.3.4 Summary of latent main effects
params_main_summary <- bind_rows(
  params_main_lcs_extra_current %>% mutate(trait = names(b5_vars)[1], self = "current") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_extra_ideal %>% mutate(trait = names(b5_vars)[1], self = "ideal") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_agree_current %>% mutate(trait = names(b5_vars)[2], self = "current") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_agree_ideal %>% mutate(trait = names(b5_vars)[2], self = "ideal") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_consc_current %>% mutate(trait = names(b5_vars)[3], self = "current") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_consc_ideal %>% mutate(trait = names(b5_vars)[3], self = "ideal") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_neuro_current %>% mutate(trait = names(b5_vars)[4], self = "current") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_neuro_ideal %>% mutate(trait = names(b5_vars)[4], self = "ideal") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_openn_current %>% mutate(trait = names(b5_vars)[5], self = "current") %>% select(trait, self, group = label, estimate, p.value, sig_diff),
  params_main_lcs_openn_ideal %>% mutate(trait = names(b5_vars)[5], self = "ideal") %>% select(trait, self, group = label, estimate, p.value, sig_diff)
) %>% mutate(group = ifelse(group=="d_int_a", "accept", "improve"))

kable(params_main_summary, digits = 3)
trait self group estimate p.value sig_diff
extraversion current accept 0.091 0.000
extraversion current improve 0.090 0.000
extraversion ideal accept -0.018 0.454 **
extraversion ideal improve -0.022 0.348 **
agreeableness current accept 0.027 0.139
agreeableness current improve 0.020 0.270
agreeableness ideal accept 0.007 0.771
agreeableness ideal improve -0.030 0.175
conscientiousness current accept 0.076 0.004
conscientiousness current improve 0.101 0.000
conscientiousness ideal accept 0.027 0.245
conscientiousness ideal improve 0.010 0.659
neuroticism current accept -0.177 0.000
neuroticism current improve -0.179 0.000
neuroticism ideal accept -0.003 0.900
neuroticism ideal improve 0.043 0.121
openness current accept 0.076 0.001 *
openness current improve 0.077 0.001 *
openness ideal accept 0.015 0.356
openness ideal improve 0.016 0.253

7 Exploratory findings

7.1 Differences across intervention groups (a)

Now confirmatory in Study 2.

7.2 Personal project dimensions (b)

We will explore b) whether the extent of change/acceptance is related to personal project dimension variables.

Not assessed, anymore, in study 2. Please see study 1 report for results.

7.3 Traits that were selected as change goals (c)

We will explore c) whether there are stronger rates of change/acceptance on traits that were selected as change goals than those that were not.

TBD!

7.4 Manipulation check (d)

Does self-improvement intervene on current self trait change (but not ideal self)? Does self-acceptance intervene on ideal self trait change (but not current self)?

7.4.1 From T1 to T2

Changes in current self traits over time:

Show the code
df_manip_check_curr <- df_sbsa2_t1t2 %>% 
  select(pid, time_d, rando, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_curr")) %>% 
  pivot_longer(ends_with("_comb_curr"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_manip_check_curr_unlist <- as.data.frame(summary(df_manip_check_curr[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_manip_check_curr)) {
  df_manip_check_curr_unlist <- bind_rows(df_manip_check_curr_unlist, 
                                          as.data.frame(summary(df_manip_check_curr[[i]])$coefficients) %>% as_tibble())
}
kable(df_manip_check_curr_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), # order by BFI traits, 
      digits = 3)
outcome term est std_err p sig
extraversion Intercept 2.845 0.039 0.000 ***
extraversion time 0.113 0.026 0.000 ***
extraversion group -0.069 0.054 0.203
extraversion time*group 0.009 0.036 0.800
agreeableness Intercept 3.633 0.032 0.000 ***
agreeableness time 0.048 0.023 0.038 *
agreeableness group -0.030 0.046 0.515
agreeableness time*group 0.033 0.033 0.316
conscientiousness Intercept 3.371 0.042 0.000 ***
conscientiousness time 0.075 0.027 0.006 **
conscientiousness group 0.026 0.059 0.653
conscientiousness time*group 0.026 0.038 0.490
neuroticism Intercept 3.220 0.046 0.000 ***
neuroticism time -0.172 0.030 0.000 ***
neuroticism group 0.033 0.065 0.611
neuroticism time*group -0.006 0.042 0.887
openness Intercept 3.707 0.035 0.000 ***
openness time 0.079 0.023 0.001 ***
openness group -0.029 0.050 0.555
openness time*group -0.001 0.032 0.977
sociability Intercept 2.485 0.054 0.000 ***
sociability time 0.168 0.037 0.000 ***
sociability group -0.040 0.076 0.600
sociability time*group -0.061 0.053 0.244
assertiveness Intercept 2.908 0.048 0.000 ***
assertiveness time 0.076 0.035 0.028 *
assertiveness group -0.078 0.068 0.250
assertiveness time*group 0.036 0.048 0.453
energy Intercept 3.140 0.046 0.000 ***
energy time 0.094 0.038 0.014 *
energy group -0.088 0.065 0.176
energy time*group 0.053 0.054 0.326
compassion Intercept 3.753 0.041 0.000 ***
compassion time 0.042 0.037 0.254
compassion group -0.056 0.057 0.326
compassion time*group 0.079 0.051 0.124
respectfulness Intercept 4.035 0.038 0.000 ***
respectfulness time 0.013 0.032 0.680
respectfulness group -0.014 0.054 0.804
respectfulness time*group -0.002 0.044 0.955
trust Intercept 3.110 0.045 0.000 ***
trust time 0.097 0.035 0.006 **
trust group -0.016 0.064 0.800
trust time*group 0.011 0.049 0.831
organization Intercept 3.445 0.052 0.000 ***
organization time 0.056 0.037 0.131
organization group 0.109 0.074 0.143
organization time*group 0.023 0.052 0.657
productiveness Intercept 3.148 0.049 0.000 ***
productiveness time 0.141 0.039 0.000 ***
productiveness group 0.043 0.069 0.538
productiveness time*group 0.001 0.054 0.978
responsibility Intercept 3.522 0.045 0.000 ***
responsibility time 0.035 0.036 0.333
responsibility group -0.068 0.064 0.284
responsibility time*group 0.052 0.051 0.311
anxiety Intercept 3.525 0.050 0.000 ***
anxiety time -0.147 0.037 0.000 ***
anxiety group 0.093 0.070 0.185
anxiety time*group -0.012 0.052 0.817
depression Intercept 3.144 0.054 0.000 ***
depression time -0.238 0.039 0.000 ***
depression group 0.004 0.076 0.954
depression time*group 0.031 0.055 0.572
volatility Intercept 2.993 0.054 0.000 ***
volatility time -0.127 0.042 0.002 **
volatility group 0.001 0.076 0.987
volatility time*group -0.045 0.058 0.441
curiosity Intercept 3.817 0.043 0.000 ***
curiosity time 0.052 0.032 0.106
curiosity group -0.014 0.060 0.817
curiosity time*group 0.006 0.045 0.899
aesthetic Intercept 3.661 0.047 0.000 ***
aesthetic time 0.047 0.036 0.192
aesthetic group -0.087 0.066 0.185
aesthetic time*group 0.036 0.050 0.474
imagination Intercept 3.642 0.045 0.000 ***
imagination time 0.141 0.035 0.000 ***
imagination group 0.014 0.063 0.824
imagination time*group -0.046 0.049 0.349

No significant group effects (higher trait level in self-improvement group at baseline) and also no significant differences in the changes over time in current-self trait levels (timeXgroup). Significant (at p < .001) changes over time in current-self trait levels (time) for 3 of the domains and five of the facets (independent of intervention group membership).

Changes in ideal self traits over time:

Show the code
df_manip_check_ideal <- df_sbsa2_t1t2 %>% 
  select(pid, time_d, rando, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_ideal")) %>% 
  pivot_longer(ends_with("_comb_ideal"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_manip_check_ideal_unlist <- as.data.frame(summary(df_manip_check_ideal[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_manip_check_ideal)) {
  df_manip_check_ideal_unlist <- bind_rows(df_manip_check_ideal_unlist, 
                                          as.data.frame(summary(df_manip_check_ideal[[i]])$coefficients) %>% as_tibble())
}
kable(df_manip_check_ideal_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), # order by BFI traits, 
      digits = 3)
outcome term est std_err p sig
extraversion Intercept 3.919 0.027 0.000 ***
extraversion time -0.023 0.024 0.351
extraversion group -0.009 0.038 0.812
extraversion time*group 0.007 0.034 0.827
agreeableness Intercept 4.078 0.029 0.000 ***
agreeableness time 0.007 0.024 0.777
agreeableness group -0.018 0.041 0.670
agreeableness time*group -0.035 0.034 0.300
conscientiousness Intercept 4.414 0.027 0.000 ***
conscientiousness time 0.027 0.024 0.266
conscientiousness group 0.005 0.038 0.889
conscientiousness time*group -0.018 0.034 0.601
neuroticism Intercept 1.704 0.028 0.000 ***
neuroticism time 0.004 0.026 0.878
neuroticism group -0.032 0.039 0.413
neuroticism time*group 0.032 0.037 0.381
openness Intercept 4.140 0.031 0.000 ***
openness time 0.054 0.025 0.035 *
openness group -0.052 0.043 0.233
openness time*group 0.001 0.036 0.971
sociability Intercept 3.735 0.038 0.000 ***
sociability time -0.085 0.036 0.020 *
sociability group -0.029 0.054 0.583
sociability time*group 0.060 0.051 0.239
assertiveness Intercept 3.832 0.037 0.000 ***
assertiveness time 0.001 0.035 0.984
assertiveness group 0.001 0.052 0.981
assertiveness time*group 0.002 0.049 0.967
energy Intercept 4.189 0.034 0.000 ***
energy time 0.016 0.038 0.672
energy group 0.003 0.048 0.953
energy time*group -0.047 0.053 0.384
compassion Intercept 4.029 0.038 0.000 ***
compassion time 0.016 0.037 0.675
compassion group -0.019 0.053 0.721
compassion time*group -0.008 0.052 0.885
respectfulness Intercept 4.454 0.032 0.000 ***
respectfulness time -0.001 0.029 0.963
respectfulness group -0.031 0.045 0.492
respectfulness time*group -0.007 0.041 0.862
trust Intercept 3.751 0.040 0.000 ***
trust time 0.013 0.036 0.728
trust group -0.002 0.056 0.965
trust time*group -0.099 0.051 0.053
organization Intercept 4.426 0.032 0.000 ***
organization time 0.006 0.034 0.849
organization group 0.001 0.045 0.982
organization time*group 0.031 0.048 0.511
productiveness Intercept 4.513 0.030 0.000 ***
productiveness time 0.045 0.030 0.137
productiveness group 0.055 0.042 0.197
productiveness time*group -0.052 0.042 0.215
responsibility Intercept 4.300 0.035 0.000 ***
responsibility time 0.035 0.033 0.288
responsibility group -0.031 0.049 0.523
responsibility time*group -0.027 0.046 0.562
anxiety Intercept 1.876 0.035 0.000 ***
anxiety time 0.030 0.039 0.445
anxiety group -0.036 0.050 0.466
anxiety time*group 0.004 0.055 0.947
depression Intercept 1.499 0.030 0.000 ***
depression time -0.003 0.031 0.911
depression group -0.022 0.042 0.597
depression time*group 0.040 0.043 0.356
volatility Intercept 1.736 0.035 0.000 ***
volatility time -0.018 0.036 0.611
volatility group -0.041 0.049 0.409
volatility time*group 0.066 0.050 0.188
curiosity Intercept 4.129 0.038 0.000 ***
curiosity time 0.028 0.038 0.455
curiosity group -0.046 0.054 0.396
curiosity time*group 0.002 0.053 0.965
aesthetic Intercept 3.922 0.039 0.000 ***
aesthetic time 0.108 0.037 0.004 **
aesthetic group -0.082 0.056 0.142
aesthetic time*group -0.050 0.052 0.334
imagination Intercept 4.369 0.036 0.000 ***
imagination time 0.024 0.036 0.506
imagination group -0.010 0.051 0.842
imagination time*group 0.028 0.051 0.585

No significant group effects (higher trait level in self-improvement group at baseline) and also no significant differences in the changes over time in ideal-self trait levels (timeXgroup). No significant changes over time in ideal-self trait levels (time; independent of intervention group membership).

7.4.2 From T2 to T3

Changes in current self traits over time:

Show the code
df_sbsa2_t2t3 <- df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(2,3)) %>% mutate(time_d = time - 2)

df_manip_check_curr_fu <- df_sbsa2_t2t3 %>% 
  select(pid, time_d, rando, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_curr")) %>% 
  pivot_longer(ends_with("_comb_curr"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_manip_check_curr_fu_unlist <- as.data.frame(summary(df_manip_check_curr_fu[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_manip_check_curr_fu)) {
  df_manip_check_curr_fu_unlist <- bind_rows(df_manip_check_curr_fu_unlist, 
                                          as.data.frame(summary(df_manip_check_curr_fu[[i]])$coefficients) %>% as_tibble())
}
kable(df_manip_check_curr_fu_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), # order by BFI traits, 
      digits = 3)
outcome term est std_err p sig
extraversion Intercept 2.951 0.041 0.000 ***
extraversion time 0.032 0.025 0.217
extraversion group -0.050 0.058 0.389
extraversion time*group -0.017 0.036 0.625
agreeableness Intercept 3.697 0.035 0.000 ***
agreeableness time 0.015 0.022 0.486
agreeableness group -0.011 0.050 0.822
agreeableness time*group -0.019 0.031 0.531
conscientiousness Intercept 3.468 0.045 0.000 ***
conscientiousness time 0.072 0.028 0.009 **
conscientiousness group 0.067 0.064 0.296
conscientiousness time*group -0.060 0.039 0.121
neuroticism Intercept 3.068 0.049 0.000 ***
neuroticism time -0.062 0.028 0.030 *
neuroticism group -0.015 0.069 0.829
neuroticism time*group 0.017 0.040 0.674
openness Intercept 3.792 0.039 0.000 ***
openness time -0.001 0.022 0.969
openness group -0.038 0.054 0.484
openness time*group 0.016 0.031 0.619
sociability Intercept 2.641 0.057 0.000 ***
sociability time 0.046 0.036 0.202
sociability group -0.092 0.080 0.254
sociability time*group 0.006 0.050 0.902
assertiveness Intercept 2.984 0.051 0.000 ***
assertiveness time 0.039 0.036 0.281
assertiveness group -0.050 0.072 0.484
assertiveness time*group -0.023 0.050 0.648
energy Intercept 3.228 0.048 0.000 ***
energy time 0.011 0.040 0.781
energy group -0.008 0.068 0.905
energy time*group -0.034 0.056 0.535
compassion Intercept 3.814 0.044 0.000 ***
compassion time 0.040 0.037 0.277
compassion group 0.000 0.062 1.000
compassion time*group -0.053 0.052 0.301
respectfulness Intercept 4.067 0.041 0.000 ***
respectfulness time 0.025 0.029 0.394
respectfulness group -0.017 0.058 0.772
respectfulness time*group -0.011 0.041 0.791
trust Intercept 3.211 0.048 0.000 ***
trust time -0.018 0.035 0.603
trust group -0.019 0.068 0.780
trust time*group 0.010 0.048 0.834
organization Intercept 3.520 0.056 0.000 ***
organization time 0.077 0.037 0.038 *
organization group 0.153 0.079 0.053
organization time*group -0.027 0.052 0.607
productiveness Intercept 3.297 0.054 0.000 ***
productiveness time 0.077 0.037 0.039 *
productiveness group 0.064 0.076 0.402
productiveness time*group -0.091 0.052 0.080
responsibility Intercept 3.586 0.049 0.000 ***
responsibility time 0.064 0.040 0.113
responsibility group -0.018 0.068 0.797
responsibility time*group -0.060 0.056 0.289
anxiety Intercept 3.396 0.053 0.000 ***
anxiety time -0.035 0.038 0.355
anxiety group 0.047 0.075 0.534
anxiety time*group -0.036 0.053 0.498
depression Intercept 2.922 0.058 0.000 ***
depression time -0.076 0.039 0.052
depression group -0.013 0.081 0.876
depression time*group 0.004 0.054 0.941
volatility Intercept 2.886 0.056 0.000 ***
volatility time -0.070 0.038 0.069
volatility group -0.078 0.078 0.322
volatility time*group 0.072 0.054 0.181
curiosity Intercept 3.865 0.046 0.000 ***
curiosity time 0.029 0.033 0.374
curiosity group -0.015 0.064 0.811
curiosity time*group -0.048 0.046 0.300
aesthetic Intercept 3.724 0.051 0.000 ***
aesthetic time -0.025 0.035 0.486
aesthetic group -0.060 0.072 0.401
aesthetic time*group 0.031 0.050 0.534
imagination Intercept 3.786 0.047 0.000 ***
imagination time -0.007 0.034 0.834
imagination group -0.037 0.065 0.575
imagination time*group 0.065 0.048 0.177

No further changes from T2 to T3 that are significant at p < .001 (independent of intervention group membership). Suggestive increase in conscientiousness.

Changes in ideal self traits over time:

Show the code
df_manip_check_ideal_fu <- df_sbsa2_t2t3 %>% 
  select(pid, time_d, rando, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_ideal")) %>% 
  pivot_longer(ends_with("_comb_ideal"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_manip_check_ideal_fu_unlist <- as.data.frame(summary(df_manip_check_ideal_fu[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_manip_check_ideal_fu)) {
  df_manip_check_ideal_fu_unlist <- bind_rows(df_manip_check_ideal_fu_unlist, 
                                          as.data.frame(summary(df_manip_check_ideal_fu[[i]])$coefficients) %>% as_tibble())
}
kable(df_manip_check_ideal_fu_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), # order by BFI traits, 
      digits = 3)
outcome term est std_err p sig
extraversion Intercept 3.897 0.029 0.000 ***
extraversion time -0.006 0.024 0.808
extraversion group 0.000 0.041 0.997
extraversion time*group -0.016 0.034 0.649
agreeableness Intercept 4.099 0.032 0.000 ***
agreeableness time 0.003 0.024 0.891
agreeableness group -0.072 0.045 0.108
agreeableness time*group 0.033 0.033 0.327
conscientiousness Intercept 4.448 0.030 0.000 ***
conscientiousness time -0.007 0.023 0.761
conscientiousness group -0.022 0.042 0.605
conscientiousness time*group 0.006 0.032 0.848
neuroticism Intercept 1.700 0.029 0.000 ***
neuroticism time 0.010 0.025 0.675
neuroticism group 0.012 0.041 0.769
neuroticism time*group -0.011 0.035 0.760
openness Intercept 4.192 0.033 0.000 ***
openness time 0.004 0.026 0.864
openness group -0.054 0.047 0.250
openness time*group 0.006 0.037 0.866
sociability Intercept 3.661 0.042 0.000 ***
sociability time 0.003 0.036 0.923
sociability group 0.029 0.059 0.615
sociability time*group -0.054 0.050 0.284
assertiveness Intercept 3.826 0.040 0.000 ***
assertiveness time -0.021 0.039 0.580
assertiveness group 0.010 0.057 0.863
assertiveness time*group -0.024 0.054 0.655
energy Intercept 4.203 0.037 0.000 ***
energy time 0.004 0.040 0.927
energy group -0.044 0.052 0.397
energy time*group 0.034 0.056 0.541
compassion Intercept 4.070 0.041 0.000 ***
compassion time 0.035 0.038 0.354
compassion group -0.057 0.058 0.327
compassion time*group 0.019 0.053 0.726
respectfulness Intercept 4.454 0.035 0.000 ***
respectfulness time -0.005 0.029 0.865
respectfulness group -0.044 0.049 0.372
respectfulness time*group 0.027 0.041 0.518
trust Intercept 3.774 0.043 0.000 ***
trust time -0.021 0.037 0.568
trust group -0.112 0.061 0.066
trust time*group 0.054 0.052 0.296
organization Intercept 4.434 0.034 0.000 ***
organization time 0.037 0.034 0.281
organization group 0.038 0.048 0.428
organization time*group -0.028 0.048 0.557
productiveness Intercept 4.564 0.033 0.000 ***
productiveness time -0.049 0.032 0.121
productiveness group -0.008 0.046 0.865
productiveness time*group 0.015 0.044 0.732
responsibility Intercept 4.346 0.038 0.000 ***
responsibility time 0.001 0.034 0.984
responsibility group -0.076 0.053 0.154
responsibility time*group 0.024 0.048 0.614
anxiety Intercept 1.901 0.038 0.000 ***
anxiety time -0.002 0.039 0.953
anxiety group -0.020 0.053 0.704
anxiety time*group 0.053 0.055 0.336
depression Intercept 1.490 0.032 0.000 ***
depression time -0.029 0.031 0.350
depression group 0.021 0.044 0.637
depression time*group 0.003 0.043 0.949
volatility Intercept 1.708 0.038 0.000 ***
volatility time 0.061 0.035 0.085
volatility group 0.036 0.053 0.499
volatility time*group -0.092 0.050 0.065
curiosity Intercept 4.157 0.042 0.000 ***
curiosity time -0.008 0.039 0.847
curiosity group -0.052 0.059 0.378
curiosity time*group -0.033 0.055 0.548
aesthetic Intercept 4.034 0.044 0.000 ***
aesthetic time -0.011 0.037 0.776
aesthetic group -0.135 0.061 0.028 *
aesthetic time*group 0.080 0.052 0.125
imagination Intercept 4.385 0.038 0.000 ***
imagination time 0.037 0.036 0.315
imagination group 0.022 0.053 0.682
imagination time*group -0.029 0.051 0.575

No further changes from T2 to T3 that are significant at p < .001 (independent of intervention group membership). No group differences.

7.5 Word clouds of change descriptions (e)

Generate word clouds based on the content from the free-form change descriptions written after the intervention at T2 and T3 (same question asked at both time points).

Prepare data, separately for each intervention group

Show the code
# see tutorial here: https://towardsdatascience.com/create-a-word-cloud-with-r-bde3e7422e8a

# self-improvement group

# Create a vector containing only the text
text_sb <- df_sbsa2 %>% filter(!is.na(sb14_01) & rando!="Waitlist-Control") %>% pull(sb14_01)
text_sb <- gsub("[\r\n]", " ", text_sb)
# Create a corpus  
docs_sb <- tm::VCorpus(tm::VectorSource(text_sb))

# cleaning the text
docs_sb <- docs_sb %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs_sb <- tm_map(docs_sb, content_transformer(tolower))
docs_sb <- tm_map(docs_sb, removeWords, stopwords("english"))

# Create a document-term-matrix
dtm_sb <- TermDocumentMatrix(docs_sb) 
matrix_sb <- as.matrix(dtm_sb) 
words_sb <- sort(rowSums(matrix_sb), decreasing=TRUE) 
df_words_sb <- data.frame(word = names(words_sb), freq=words_sb)
# remove a few of the frequent "non-words"
df_words_sb <- df_words_sb %>% as_tibble() %>% 
  filter(!word %in% c("ive", "didnt", "cant", "dont"))

# self-acceptance group

# Create a vector containing only the text
text_sa <- df_sbsa2 %>% filter(!is.na(sa13_01) & rando!="Waitlist-Control") %>% pull(sa13_01)
text_sa <- gsub("[\r\n]", " ", text_sa)
# Create a corpus  
docs_sa <- tm::VCorpus(tm::VectorSource(text_sa))

# cleaning the text
docs_sa <- docs_sa %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs_sa <- tm_map(docs_sa, content_transformer(tolower))
docs_sa <- tm_map(docs_sa, removeWords, stopwords("english"))

# Create a document-term-matrix
dtm_sa <- TermDocumentMatrix(docs_sa) 
matrix_sa <- as.matrix(dtm_sa) 
words_sa <- sort(rowSums(matrix_sa), decreasing=TRUE) 
df_words_sa <- data.frame(word = names(words_sa), freq=words_sa)
# remove a few of the frequent "non-words"
df_words_sa <- df_words_sa %>% as_tibble() %>% 
  filter(!word %in% c("ive", "didnt", "cant", "dont"))

Generate the word cloud: for self-improvement group

Show the code
set.seed(1234) # for reproducibility 
wordcloud(words = df_words_sb$word, freq = df_words_sb$freq, min.freq = 1,           
          max.words=150, random.order=FALSE, rot.per=0.35,            
          colors=brewer.pal(8, "Dark2"))

Generate the word cloud: for self-acceptance group

Show the code
set.seed(1234) # for reproducibility 
wordcloud(words = df_words_sa$word, freq = df_words_sa$freq, min.freq = 1,           
          max.words=150, random.order=FALSE, rot.per=0.35,            
          colors=brewer.pal(8, "Dark2"))

Lastly, delete free-form text variables again from data set

df_sbsa2 <- df_sbsa2 %>% select(-c(sb14_01, sa13_01))
base::save(df_sbsa2, file = "data/df_sbsa2.rda")

7.6 Word clouds of diary entries (f)

Generate word clouds based on the content of the three diaries written between T1 and T2. I only focus on the two intervention groups here (not on the CG between T2 and T3).

Read in the data and see how many people filled out the diaries (optional but still compensated)

Show the code
path_diar1_sb <- "data/diaries/sb_1/data_PersonalityChange_2024-03-22_14-37.xlsx"
path_diar2_sb <- "data/diaries/sb_2/data_PersonalityChange_2024-03-22_16-19.xlsx"
path_diar3_sb <- "data/diaries/sb_3/data_PersonalityChange_2024-03-22_16-22.xlsx"

path_diar1_sa <- "data/diaries/sa_1/data_PersonalityChange_2024-03-22_16-18.xlsx"
path_diar2_sa <- "data/diaries/sa_2/data_PersonalityChange_2024-03-22_16-20.xlsx"
path_diar3_sa <- "data/diaries/sa_3/data_PersonalityChange_2024-03-22_16-22.xlsx"

# T1
diar1_sb <- readxl::read_excel(path_diar1_sb, col_names = F, skip = 2, guess_max = 10000)
var_names1_sb <- readxl::read_excel(path_diar1_sb, col_names = F)[c(1,2), ]
var_names1_sb <- data.frame(t(var_names1_sb))
colnames(diar1_sb) <- stringr::str_to_lower(var_names1_sb$X1) # only lower case pls
# label data 
diar1_sb <- labelled::set_variable_labels(diar1_sb, .labels = var_names1_sb$X2)
diar1_sb <- diar1_sb %>% filter(dm01_01!="Test" & !is.na(sb15_01)) %>% select(dm01_01, sb15_01)

diar1_sa <- readxl::read_excel(path_diar1_sa, col_names = F, skip = 2, guess_max = 10000)
var_names1_sa <- readxl::read_excel(path_diar1_sa, col_names = F)[c(1,2), ]
var_names1_sa <- data.frame(t(var_names1_sa))
colnames(diar1_sa) <- stringr::str_to_lower(var_names1_sa$X1) # only lower case pls
# label data 
diar1_sa <- labelled::set_variable_labels(diar1_sa, .labels = var_names1_sa$X2)
diar1_sa <- diar1_sa %>% filter(dm01_01!="Test" & !is.na(sa15_01)) %>% select(dm01_01, sa15_01)

# T2
diar2_sb <- readxl::read_excel(path_diar2_sb, col_names = F, skip = 2, guess_max = 10000)
var_names2_sb <- readxl::read_excel(path_diar2_sb, col_names = F)[c(1,2), ]
var_names2_sb <- data.frame(t(var_names2_sb))
colnames(diar2_sb) <- stringr::str_to_lower(var_names2_sb$X1) # only lower case pls
# label data 
diar2_sb <- labelled::set_variable_labels(diar2_sb, .labels = var_names2_sb$X2)
diar2_sb <- diar2_sb %>% filter(dm01_01!="Test" & !is.na(sb15_01)) %>% select(dm01_01, sb15_01)

diar2_sa <- readxl::read_excel(path_diar2_sa, col_names = F, skip = 2, guess_max = 10000)
var_names2_sa <- readxl::read_excel(path_diar2_sa, col_names = F)[c(1,2), ]
var_names2_sa <- data.frame(t(var_names2_sa))
colnames(diar2_sa) <- stringr::str_to_lower(var_names2_sa$X1) # only lower case pls
# label data 
diar2_sa <- labelled::set_variable_labels(diar2_sa, .labels = var_names2_sa$X2)
diar2_sa <- diar2_sa %>% filter(dm01_01!="Test" & !is.na(sa15_01)) %>% select(dm01_01, sa15_01)

# T3
diar3_sb <- readxl::read_excel(path_diar3_sb, col_names = F, skip = 2, guess_max = 10000)
var_names3_sb <- readxl::read_excel(path_diar3_sb, col_names = F)[c(1,2), ]
var_names3_sb <- data.frame(t(var_names3_sb))
colnames(diar3_sb) <- stringr::str_to_lower(var_names3_sb$X1) # only lower case pls
# label data 
diar3_sb <- labelled::set_variable_labels(diar3_sb, .labels = var_names3_sb$X2)
diar3_sb <- diar3_sb %>% filter(dm01_01!="Test" & !is.na(sb15_01)) %>% select(dm01_01, sb15_01)

diar3_sa <- readxl::read_excel(path_diar3_sa, col_names = F, skip = 2, guess_max = 10000)
var_names3_sa <- readxl::read_excel(path_diar3_sa, col_names = F)[c(1,2), ]
var_names3_sa <- data.frame(t(var_names3_sa))
colnames(diar3_sa) <- stringr::str_to_lower(var_names3_sa$X1) # only lower case pls
# label data 
diar3_sa <- labelled::set_variable_labels(diar3_sa, .labels = var_names3_sa$X2)
diar3_sa <- diar3_sa %>% filter(dm01_01!="Test" & !is.na(sa15_01)) %>% select(dm01_01, sa15_01)

# appending together all three diaries in each group
diaries_sb <- bind_rows(diar1_sb, diar2_sb, diar3_sb)
diaries_sa <- bind_rows(diar1_sa, diar2_sa, diar3_sa)

# filter out one case where it was obvious that they used a LLM
diaries_sb <- diaries_sb %>% filter(!str_detect(sb15_01, "language model"))

How many diaries at each time point?

tibble(time = c(1, 2, 3), improve = c(nrow(diar1_sb), nrow(diar2_sb), nrow(diar2_sb)),
       accept = c(nrow(diar1_sa), nrow(diar2_sa), nrow(diar2_sa)))
# A tibble: 3 × 3
   time improve accept
  <dbl>   <int>  <int>
1     1     311    287
2     2     305    294
3     3     305    294

Prepare data, separately for each intervention group

Show the code
# see tutorial here: https://towardsdatascience.com/create-a-word-cloud-with-r-bde3e7422e8a

# self-improvement group

# Create a vector containing only the text
text_diaries_sb <- diaries_sb %>% pull(sb15_01)
text_diaries_sb <- gsub("[\r\n]", " ", text_diaries_sb)
# Create a corpus  
docs_diaries_sb <- tm::VCorpus(tm::VectorSource(text_diaries_sb))

# cleaning the text
docs_diaries_sb <- docs_diaries_sb %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs_diaries_sb <- tm_map(docs_diaries_sb, content_transformer(tolower))
docs_diaries_sb <- tm_map(docs_diaries_sb, removeWords, stopwords("english"))

# Create a document-term-matrix
dtm_diaries_sb <- TermDocumentMatrix(docs_diaries_sb) 
matrix_diaries_sb <- as.matrix(dtm_diaries_sb) 
words_diaries_sb <- sort(rowSums(matrix_diaries_sb), decreasing=TRUE) 
df_words_diaries_sb <- data.frame(word = names(words_diaries_sb), freq=words_diaries_sb)
# remove a few of the frequent "non-words"
df_words_diaries_sb <- df_words_diaries_sb %>% as_tibble() %>% 
  filter(!word %in% c("ive", "didnt", "cant", "dont"))

# self-acceptance group

# Create a vector containing only the text
text_diaries_sa <- diaries_sa %>% pull(sa15_01)
text_diaries_sa <- gsub("[\r\n]", " ", text_diaries_sa)
# Create a corpus  
docs_diaries_sa <- tm::VCorpus(tm::VectorSource(text_diaries_sa))

# cleaning the text
docs_diaries_sa <- docs_diaries_sa %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs_diaries_sa <- tm_map(docs_diaries_sa, content_transformer(tolower))
docs_diaries_sa <- tm_map(docs_diaries_sa, removeWords, stopwords("english"))

# Create a document-term-matrix
dtm_diaries_sa <- TermDocumentMatrix(docs_diaries_sa) 
matrix_diaries_sa <- as.matrix(dtm_diaries_sa) 
words_diaries_sa <- sort(rowSums(matrix_diaries_sa), decreasing=TRUE) 
df_words_diaries_sa <- data.frame(word = names(words_diaries_sa), freq=words_diaries_sa)
# remove a few of the frequent "non-words"
df_words_diaries_sa <- df_words_diaries_sa %>% as_tibble() %>% 
  filter(!word %in% c("ive", "didnt", "cant", "dont"))

Generate the word cloud: for self-improvement group

Show the code
set.seed(1234) # for reproducibility 
wordcloud(words = df_words_diaries_sb$word, freq = df_words_diaries_sb$freq, min.freq = 1,           
          max.words=150, random.order=FALSE, rot.per=0.35,            
          colors=brewer.pal(8, "Dark2"))

Generate the word cloud: for self-acceptance group

Show the code
set.seed(1234) # for reproducibility 
wordcloud(words = df_words_diaries_sa$word, freq = df_words_diaries_sa$freq, min.freq = 1,           
          max.words=150, random.order=FALSE, rot.per=0.35,            
          colors=brewer.pal(8, "Dark2"))